Django - Как оставить ImageField пустым, если пользователь не загружает изображение - PullRequest
1 голос
/ 20 марта 2020

Я пытаюсь создать приложение для рецептов, которое позволяет пользователям загружать изображения и сохранять рецепты в списке. Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь не загружает изображение, я получаю сообщение об ошибке: attribute has no file associated with it.

Ошибка

Я посмотрел Django документация и попытка использования default тега в моем HTML шаблоне безуспешно. Значение называется image_ingredients в models.py

Как я могу сделать так, чтобы пользователь мог просто оставить ImageField пустым?

Вот мой код:

models.py

# Recipe Field

class Recipe(models.Model):
    title = models.CharField(max_length=200)
# TODO: Add default image if image is left blank
    image = models.ImageField(upload_to='recipes/images/', blank=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE,)
    daily_meals = ['Breakfast', 'Brunch', 'Elevenses', 'Lunch', 'Tea', 'Supper', 'Dinner']
    meal = models.ForeignKey(Meal, limit_choices_to={'name__in': daily_meals}, on_delete=models.CASCADE,)

    image_ingredients = models.ImageField(upload_to='recipes/images/', null=True, blank=True)

    ingredients = models.TextField(blank=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

views.py

# Solo recipe with instructions

def solo(request, recipe_id):
    recipe = get_object_or_404(Recipe, pk=recipe_id)
    return render(request, 'recipes/solo.html', {'recipe':recipe})

соло. html

<h4>Ingredients</h4>
<img src="{{ recipe.image_ingredients.url }}">
<p>{{ recipe.ingredients }}</p>

1 Ответ

0 голосов
/ 20 марта 2020

Изображение можно отобразить только при наличии элемента image_ingredients, например:

<h4>Ingredients</h4>
<b>{% if recipe.image_ingredients %}</b><img src="{{ recipe.image_ingredients.url }}"><b>{% endif %}</b>
<p>{{ recipe.ingredients }}</p>
...