Исключите поле из проверки при отправке в представлении django

#django #django-views #django-forms

Вопрос:

Это моя модель

 class Food: 
    category = models.ForeignKey(
        Category, on_delete=models.CASCADE, related_name="foods"
    )
    name = models.CharField(max_length=255)
 

Это моя форма

 class FoodForm(forms.ModelForm):
    location = forms.ModelChoiceField(
        choices=CHOICES required=True
    )

    class Meta:
        model = Food
        fields = (
            "name",
            "location",
            "category"
        )
 

После обновления мне не нужно сохранять местоположение. Мне просто нужно это в фильтрации категории, так как это зависит от нее, но мне не нужно ее сохранять. при отправке обновления он выдает ошибку 'Food' object has no attribute 'location' . Могу ли я каким-либо образом исключить это поле при отправке?

Таково мое мнение

  class FoodUpdateView(BaseUpdateView):

    form_class = forms.FoodForm

    def get_queryset(self):
        return Food.objects.all()

    def form_valid(self, form):
        return super().form_valid(form)

    def form_invalid(self, form):
        return redirect(self.get_success_url())
 

Комментарии:

1. В вашей Food модели нет location поля, поэтому ошибка говорит о том, что она не знает, куда сохранить поле location .

2. Мне не нужно сохранять location ценность. Мне просто нужно это для фильтрации category в представлении шаблона. Но мне не нужно его спасать.

3. затем вам следует удалить его из формы и, скорее всего, использовать JavaScript для фильтрации на стороне интерфейса.

4. Да, в настоящее время я уже использую javascript. Категория будет меняться каждый раз, когда меняется местоположение. Параметр расположение будет выбран из другого списка моделей. Есть ли в любом случае я могу загрузить его в форму?

5. да взгляните, например, на django-selectable . Это работает с поиском, где он будет запрашивать базу данных, если пользователь введет некоторые символы.