Django ModelForms: попытка сохранить форму, используя идентификатор внешнего ключа - PullRequest
1 голос
/ 20 июля 2009

Я пытаюсь создать новую тему, и идентификатор категории динамически определяется в javascript на стороне клиента. У меня проблема в том, что я передаю идентификатор категории и хочу найти правильный объект категории, но, используя форму модели, он проверяет, является ли категория экземпляром категории, прежде чем я могу назначить ее и сохранить.

- model.py -

class Topic(models.Model):
    category = models.ForeignKey(Category)

- form.py -

class TopicForm(ModelForm):
    category = forms.IntegerField(widget=forms.HiddenInput())

    class Meta:
        model = Topic
        fields = ('category')

- view.py -

form = TopicForm(request.POST)

if form.is_valid():
    form.save(commit=False) # throws exception category is not a Category instance
    form.category = Category.objects.get(pk=form.cleaned_data.get('category'))
    form.save()

Ответы [ 2 ]

2 голосов
/ 20 июля 2009

Используйте ModelChoiceField вместо IntegerField в вашей форме. См. Справочник по встроенным полям

0 голосов
/ 20 июля 2009

Следуя совету Огги, я изменил его на ModelChoiceField, и теперь Django делает всю магию за кулисами.

category = forms.ModelChoiceField(Category.objects.all(), widget=forms.HiddenInput())

Теперь я надеюсь, что набор запросов не будет оценен, так как в нем нет необходимости и 90 000 записей. :)

...