ValueError: Атрибут 'main_image' не имеет связанного с ним файла. на тестах Django
Я делаю тест и не понимаю, почему возникает эта ошибка
Тест:
def test_show_one_blog(self):
blog0 = Blog.objects.create(name="American persuit", content="I don't know")
url = self.client.get(reverse(viewname="blogs:blog_view", kwargs={"pk": 1}))
self.assertEqual(url.status_code, 200)
self.assertContains(url, text="American persuit")
self.assertContains(url, "I don't know")
self.assertContains(url, '2022-8-20')
Модель:
class Blog(models.Model):
name = models.CharField(max_length=140, blank=False, null=False)
content = models.TextField(max_length=700, blank=False, null=False)
pub_date = models.DateField(default=timezone.now(), blank=False, null=False)
main_image = models.ImageField(null=True, blank=True)
def __str__(self) -> str:
return self.name
ошибка:
Да, основное изображение не имеет связанного файла, это потому, что вы не назначаете его. Если файла нет, то в шаблоне возникнет ошибка ValueError
. Я решаю эту проблему, добавляя метод в модель следующим образом:
class Blog(models.Model):
...
def get_image(self):
try:
return self.main_image.attribute #(replace attribute with file, path, or url)
except ValueError:
return None # Alternatively, you can return a default image here.
И затем использовать этот метод в шаблоне вместо него. (Или в любом другом месте, где это необходимо)