Задать вопрос
  • Проблемы в юнит тесте (Entry matching query does not exist)?

    @nurzhannogerbek Автор вопроса
    javedimka, проверил. А вы уверены что здесь уместно использовать clean_up? Вылетает вот такая ошибка:

    Traceback (most recent call last):
      File "C:\Users\Nurzhan\PycharmProjects\CA\article\tests.py", line 29, in tearDown
        TEMP_PATH.clean_up()
    AttributeError: 'str' object has no attribute 'clean_up'
  • Проблемы в юнит тесте (Entry matching query does not exist)?

    @nurzhannogerbek Автор вопроса
    javedimka, все очень странно. В tearDown добавил print("work") как вы и советовали и в консоли появился этот текст из чего можно сделать вывод, что tearDown работает. Но файлы так и не удалились.

    пробовал также написать в tearDown: rmtree(self.image_path, ignore_errors=True), не помогло.

    К слову print(self.image_path) выводит такой вот странный путь:

    C:\Users\Nurzhan\PycharmProjects\CA\tests/tmp\tmpzj8idqwh


    Вам он не кажется странным?
  • Проблемы в юнит тесте (Entry matching query does not exist)?

    @nurzhannogerbek Автор вопроса
    javedimka, В питоне версии 3.5 тесты проходят без ошибок c вашим кодом, но проблему это не решило. Изображения по прежнему создаются в файле media_root и не удаляются. Запись @override_settings(MEDIA_URL=self.image_path) вызвало ошибку:

    ERROR: article.tests (unittest.loader.ModuleImportFailure)
    ----------------------------------------------------------------------
    ImportError: Failed to import test module: article.tests
    Traceback (most recent call last):
    File "/opt/python/27/lib/python2.7/unittest/loader.py", line 254, in _find_tests
    module = self._get_module_from_name(name)
    File "/opt/python/27/lib/python2.7/unittest/loader.py", line 232, in _get_module_from_name
    __import__(name)
    File "/home/nurzhan/CA/article/tests.py", line 18, in <module>
    class ArticleTestCase(TestCase):
    File "/home/nurzhan/CA/article/tests.py", line 126, in ArticleTestCase
    @override_settings(MEDIA_URL=self.image_path)
    NameError: name 'self' is not defined


    Поэтому пришлось указать путь:
    @override_settings(MEDIA_URL=os.path.join(BASE_DIR, 'tests/tmp/'))


    tests.py:
    def setUp(self):
            self.image_path = tempfile.mkdtemp(dir=os.path.join(BASE_DIR, 'tests/tmp/'))
    
        def tearDown(self):
            shutil.rmtree(self.image_path)
    
        @override_settings(MEDIA_URL=os.path.join(BASE_DIR, 'tests/tmp/'))
        def test_slide_sorting(self):
            [***]


    Если вместо MEDIA_URL указать MEDIA_ROOT, то изображения создаются в папке tests/tmp/, но не удаляются после окончания тестов. Почему-то метод tearDown не срабатывает. Есть ли у вас еще идеи?
  • Проблемы в юнит тесте (Entry matching query does not exist)?

    @nurzhannogerbek Автор вопроса
    javedimka, я правильно делаю?

    tests.py:
    import shutil
    import tempfile
    
    def setUp(self):
            self.image_path = tempfile.mkdtemp(
                prefix="image",
                suffix=".jpg",
                dir=os.path.join(BASE_DIR, 'tests/tmp')
            )
    
    def tearDown(self):
            shutil.rmtree(self.image_path)


    ERROR:
    Traceback (most recent call last):
      File "/home/nurzhan/CA/article/tests.py", line 23, in setUp
        dir=os.path.join(BASE_DIR, 'tests/tmp')
      File "/opt/python/27/lib/python2.7/tempfile.py", line 339, in mkdtemp
        _os.mkdir(file, 0700)
    OSError: [Errno 2] No such file or directory: '/home/nurzhan/CA/tests/tmp/imageIhLO3c.jpg'
  • Проблемы в юнит тесте (Entry matching query does not exist)?

    @nurzhannogerbek Автор вопроса
    javedimka, вылетает вот такая вот ошибку, хотя импорт я сделал: import tempfile. Может ли быть это из-за версии языка Питон? Я тестирую на версии 2.7. Возможно стоит использовать NamedTemporaryFile?

    AttributeError: 'module' object has no attribute 'TemporaryDirectory'


    Ответ на ваш вопрос: Когда руками статьи создавал на сайте с этим сигналом проблем не возникало.
  • Проблемы в юнит тесте (Entry matching query does not exist)?

    @nurzhannogerbek Автор вопроса
    javedimka, Можно ли задать вам еще один вопрос. В юнит тесте в методе test_article_sorting я создаю три записи. Я заметил, что в файле media_root создаются 3 изображения. При выполенение тестов, там накапливаются изображения превращаясь в мусор. Как удалять созданные изображения после тестов?

    Использовал подобную запись, но она удаляет всю папку media_root.
    def tearDown(self):
            rmtree(settings.MEDIA_ROOT, ignore_errors=True)
  • Проблемы в юнит тесте (Entry matching query does not exist)?

    @nurzhannogerbek Автор вопроса
    javedimka, Cпасибо большое за помощь! Могли бы вы пожалуйста ответить еще раз, не в виде комментария, в развернутом виде, чтобы я мог отметить ваш ответ как верным.
  • Проблемы в юнит тесте (Entry matching query does not exist)?

    @nurzhannogerbek Автор вопроса
    javedimka, Вот оно как. Спасибо за объяснение. Какой выход из данной ситуации вы видите?
  • Что еще добавить в юнит тест для функции сортировки?

    @nurzhannogerbek Автор вопроса
    Anton Kuzmichev, Сам запутался. post запрос прошел успешно. Вернул статус 200 и вернул правельный response.content. print str(first_slide.idx) возвращает 0, думаю не обновилось либо не прошел refresh_from_db. Должно быть 2 после обновления. Как вы думаете как следует правильно создавать записи с изображениями в юнит тестах? Можно ли как-то загрузить из сервера из папки static?
  • Что еще добавить в юнит тест для функции сортировки?

    @nurzhannogerbek Автор вопроса
    Anton Kuzmichev, Можно ли вам задать еще один вопрос? По этой же теме. К примеру у модели данных Article есть поле image c типом данных ImageField.

    models.py:
    class Article(models.Model):
        image = models.ImageField(
            verbose_name='Изображение',
            upload_to='article/images/%Y/%m/%d/',
            blank=False,
        )
    
        def save(self, *args, **kwargs):
            try:
                article = Article.objects.get(id=self.id)
                if article.image != self.image:
                    article.image.delete(save=False)
            except BaseException:
                pass
            super(Article, self).save(*args, **kwargs)


    Почему-то после добавления поля ImageField кажется данная строка (first_article.refresh_from_db()) перестала работать. Что можете сказать по этому поводу? Ошибку приложил внизу. Cтранно как-то все это вы так не думаете?

    tests.py:
    from django.core.files.uploadedfile import SimpleUploadedFile
            ***
            # Создаем изображение
            image = Image.new('RGB', (100, 100))
            file = tempfile.NamedTemporaryFile(suffix='.jpg')
            image.save(file)
    
            first_article = Article.objects.create(
                    pk=150,
                    idx=0,
                    head='First',
                    image=SimpleUploadedFile(
                            name='test.jpg',
                            content=open(file.name, 'rb').read(),
                            content_type='image/jpeg'
                    )
            )
    
            second_article = Article.objects.create(
                pk=160,
                idx=1,
                head='Second',
                image=SimpleUploadedFile(
                    name='test.jpg',
                    content=open(file.name, 'rb').read(),
                    content_type='image/jpeg'
                )
            )
    
            third_article = Article.objects.create(
                pk=170,
                idx=2,
                head='Third',        
                image=SimpleUploadedFile(
                    name='test.jpg',
                    content=open(file.name, 'rb').read(),
                    content_type='image/jpeg'
                )
            )
    
            data = {150: 2, 160: 0, 170: 1}
            response = self.client.post(
                reverse("article:article_sorting"),
                data=json.dumps(data),
                content_type='application/json; charset= utf-8',
                follow=True
            )
            self.assertEqual(response.content, '{"saved": "OK"}')
            self.assertEqual(response.status_code, 200)
    
            first_article.refresh_from_db()
            print str(first_slide.idx)  <-- Возвращает 0, не обновилось. Должно быть 2 после обновления
            self.assertEquals(first_article.idx, 2)
            second_article.refresh_from_db()
            self.assertEquals(second_article.idx, 0)
            third_article.refresh_from_db()
            self.assertEquals(third_article.idx, 1)


    ERROR:
    Traceback (most recent call last):
      File "/home/nurzhan/CA/article/tests.py", line 176, in test_article_sorting
        self.assertEquals(first_article.idx, 2)
    AssertionError: 0 != 2
  • Что еще добавить в юнит тест для функции сортировки?

    @nurzhannogerbek Автор вопроса
    Anton Kuzmichev, Cпасибо большое вам за помощь и подробные объяснения! =)
  • Что еще добавить в юнит тест для функции сортировки?

    @nurzhannogerbek Автор вопроса
    Anton Kuzmichev, Сделал вроде все по вашей схеме, но значение idx (поле для сортировки) не поменялось после post запроса. Что делаю не так?

    ERROR:
    Traceback (most recent call last):
      File "/home/nurzhan/CA/static_pages/tests.py", line 120, in test_article_sorting
        self.assertEquals(first_article.idx, 2)
    AssertionError: 0 != 2


    print response.content возращает {"saved": "OK"} и статус 200. Вроде правильно все, но idx не поменялся.

    tests.py:
    def test_article_sorting(self):
            first_article = Article.objects.create(pk=150, idx=0, head='First')
            second_article = Article.objects.create(pk=160, idx=1, head='Second')
            third_article = Article.objects.create(pk=170, idx=2, head='Third')
            data = {150: 2, 160: 0, 170: 1}
            response = self.client.post(
                reverse("static_page:static_page_sorting"),
                data=json.dumps(data),
                content_type='application/json',
                follow=True
            )
            self.assertEqual(response.content, '{"saved": "OK"}')
            self.assertEqual(response.status_code, 200)
            self.assertEquals(first_article.idx, 2)  <-- ОШИБКА
            self.assertEquals(second_article.idx, 0)
            self.assertEquals(third_article.idx, 1)
  • Что еще добавить в юнит тест для функции сортировки?

    @nurzhannogerbek Автор вопроса
    Спасибо за совет! Могли бы вы второй пункт более детальнее описать? Возможно на примере было бы понятнее. Не получается все в голове уложить.
  • Что еще добавить в юнит тест для функции сортировки?

    @nurzhannogerbek Автор вопроса
    javedimka, как раз в процессе чтения. Cпасибо! =)
  • FormView для формы редактирования?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов, Здравствуйте, Павел! В файле edit_article.html в конструкции url-а стоит article.id. Вот код:

    <form method="post" action="{% url 'article:article_edit' article.id %}" class="articleEditForm" enctype="multipart/form-data">
        {% csrf_token %}
        {# ПОЛЯ #}
        <button type="submit" class="btn btn-success">{% trans 'Обновить' %}</button>
    </form>


    Есть ли у нас какие-нибудь еще идеи, куда следует копать?

    Я вот что думаю. К примеру в методе get в аргументах передал pk. Но в методе form_valid при post запросе не передается pk я так думаю. Не знаю вот как передать правильно его в метод form_valid или нужно что-то другое делать. Запутался одним словом. Что вы думаете по этому поводу?
  • Как использовать django-modeltranslation за пределами админки?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов, сами поля в форме то появились, но вылезла другая, неменее странная проблема. В форме создания записи заполняю все поля, нажимаю кнопку submit. Создается новая запись. При открытии формы редактирования этой записи поля title, title_en одинаковые. На английским, хотя в поле title было написано на русском. Поле title_de стоит правильно. На немецком, правда некоторые буквы пишутся с краказябрами. Нужно видимо где-то кодировку указать. Как это поведение можно понять? Так же обстоят дела с полем body и body_en. Правильны ли мои настройки?

    settings.py:
    LANGUAGE_CODE = 'ru'
    
    LANGUAGES = (
        ('ru', _('Russian')),
        ('en', _('English')),
        ('de', _('German')),
    )
    
    MODELTRANSLATION_LANGUAGES = ('en', 'de')
  • Как использовать django-modeltranslation за пределами админки?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов, Удалил таблицу из базы данных и зависимости которые были в папке migrations. Снова сделал команды makemigration, migrate. Только после этого появились поля в форме.
  • Как использовать django-modeltranslation за пределами админки?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов, У вас с этим кодом все поля выводит? У меня поля title_en, title_de, body_en, body_de не выводятся в форму с данным кодом =(
  • Как использовать django-modeltranslation за пределами админки?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов, я так тоже пробовал. В форму выводятся лишь поля title и body. Остальные поля игнорируются. Не могу вывести все поля с переводами =(
  • Как использовать django-modeltranslation за пределами админки?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов, да вы правы, на них скрипт завязан. Если убрать метод init, то в форму выводятся лишь поля title и body. Остальные поля игнорируются. Сижу ломаю голову. Возможно нужны какие-то дополнительные настройки в файле settings.py? Думаю я что-то упустил, но не могу понять что именно. Что вы думаете по этому поводу?