Передача объекта в Django Class-Based Generi c View - PullRequest
0 голосов
/ 18 февраля 2020

Пользователю предоставляется простая таблица, в которой отображается список данных объекта питания вместе с параметром log этого элемента питания.

...
    {% for food in foods %}
        <tbody>
            <tr>
                <th scope="row"><a href="{% url 'food-detail' food.id %}">{{ food.name }}</a></th>
                <td scope="row">{{ food.data1 }} g</td>
                <td scope="row">{{ food.data2 }} g</td>
                <td scope="row">{{ food.data3 }} g</td>
                <td scope="row"><a href="{% url 'food-entry' food.id %}">Add</a></td>
            </tr>
        </tbody>
    {% endfor %}
...

Когда еда logged , базовая c запись объект должен быть создан на бэкэнде.

class Entry(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    food = models.ForeignKey(Food, on_delete=models.CASCADE)
    servings = models.DecimalField(default=1, max_digits=4, decimal_places=2)
    date_of_entry = models.DateField(default=timezone.now)

    def __str__(self):
        return self.food.name

В Серия Кори Шафера на Django мы можем установить поле пользователя в методе CreateView form_valid().

class EntryCreateView(CreateView):
    model = Entry
    fields = ['servings']

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super().form_valid(form)

Я сталкивался с функциональными решениями для подобных задач, таких как:

product = Product.objects.filter(id=kwargs.get('item_id', "")).first()

Много логики c происходит под капотом, поэтому я изо всех сил чтобы выяснить, к каким данным я могу получить доступ / использовать из моего EntryCreateView(CreateView) класса. Существует ли стандартное решение для настройки данных участника Entry 'food'? Мой случай кажется взаимозаменяемым с функциями «добавить в список» или «добавить в корзину», но я в основном вижу, как они обрабатываются в представлениях на основе функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...