Django, как использовать CreateView и UpdateView для добавления двух записей одновременно - PullRequest
0 голосов
/ 17 марта 2019

Мне нужна модель с некоторыми полями FloatField, каждая запись этой таблицы должна использоваться с другой (первая строка указывает на минимум, а вторая определяет максимум). Мне нравится, что значения этих двух строк добавляются или редактируются пользователем одновременно. Мне не терпится узнать, как использовать универсальные классы django CreateView и UpdateView или любые другие инструменты для этой цели. Пожалуйста, дайте мне знать ваши полезные комментарии.

Обновление: это часть моих кодов:

#models.py
class DefinedInfo(models.Model):
    user = models.CharField(max_length=30)
    bound = models.CharField(max_length=3) #takes 'min' or 'max'
    density = models.FloatField(default=0)
    weight =models.FloatField(default=0)
    ....


#views.py
class InfoCreateView(LoginRequiredMixin, CreateView):
    model = DefinedInfo
    template_name = 'item_new.html'
    fields = ['density', 'weight' ...]

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

class InfoUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = DefinedInfo
    fields = ['density', 'weight' ...]
    template_name = 'item_edit.html'
    login_url = 'login'

    def test_func(self):
        obj = self.get_object()
        return obj.user == self.request.user


#Html template
{% extends 'base.html' %}
{% load crispy_forms_tags %}

 {% block content %}
<div>
<h5>Define new item</h5>
  <div>
 <form action="" method="post">{% csrf_token %}
     {{ form|crispy }}
  <button" type="submit">Save </button> 
  <button type="reset" onclick="location.href={% url 'profile' %}" >Cancel</button>
</form>
</div>
 </div>
 {% endblock %}

Нет проблем добавлять или редактировать отдельные записи, но я предпочитаю обрабатывать записи, относящиеся к "min" и "max" одновременно.

1 Ответ

2 голосов
/ 17 марта 2019

Общие представления на основе классов предназначены для обновления / создания / удаления одного единственного объекта модели за один раз.
Если вы хотите внести некоторые изменения, это может быть яснее и проще написать ваши собственные представления .

Создание UpdateModel (UpdateView) сбивает с толку, если он изменяет две строки в БД.

...