Как вставить данные внешнего ключа через Django Форма модели - PullRequest
1 голос
/ 30 марта 2020

Как вставить данные внешнего ключа через форму. Пожалуйста помоги . Что я делаю неправильно. Поэтому у меня есть две модели:

class Genre(models.Model):
    """Model representing a book genre."""
    name = models.CharField(max_length=200, help_text='Enter a book genre (e.g. Science Fiction)')

    def __str__(self):
        """String for representing the Model object."""
        return self.name

    ass UserItem(models.Model):
        name= models.CharField(max_length = 50, null=True)
        genre = models.ForeignKey(Genre, on_delete=models.SET_NULL, null=True)

Forms.py: я хочу создать форму для хранения данных элемента. Невозможно сослаться на жанр и ввести значение через форму.

    class ItemForm(forms.ModelForm):
        name = forms.CharField()
        genre = forms.CharField()

        class Meta:
            model = UserItem
            fields = ['name', 'genre' ]

Views.py

    def item(request):
        if request.method == 'POST':
            genre_obj = Genre.objects.get(name=request.POST.get('name'))
            print("Inside post")
            item_form = ItemForm(request.POST)
            if item_form.is_valid():
                print("valid form")
                item_form_obj = ItemForm.save(commit=False)
                item_form_obj.genre = genre_obj
                item_form_obj.save()
                return HttpResponseRedirect(reverse('file_upload') )
            else:
                print("invalid form")
            return HttpResponseRedirect(reverse('file_list') )

1 Ответ

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

genre_obj - это набор запросов, вы не можете назначить набор запросов для поля Foreignkey. Вы можете назначать объекты, которые находятся внутри набора запросов, поэтому попробуйте этот способ

item_form_obj.genre = genre_obj[0]

и вместо использования HttpResponseRedirect используйте redirect в обоих местах

from django.shortcuts import redirect

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