Значение формы Django не меняется в представлениях - PullRequest
0 голосов
/ 17 октября 2019

Я сейчас пытаюсь установить значение foreignKey в файле views.py, но оно не изменяется.

models.py

class Item(models.Model):
    sht = models.ForeignKey(Sheet, on_delete=models.CASCADE, blank=True, null=True)
    name = models.CharField(max_length=100)
    amount = models.IntegerField(default=1)

    def __str__(self):
        return self.name

views.py

def addItem(request, slug):
    sheet = Sheet.objects.get(slug=slug)
    form = forms.AddItem()

    if request.user == sheet.author:
        if request.method == 'POST':
            form = forms.AddItem(request.POST)

            if form.is_valid():
                form.save(commit=False)
                form.sht = Sheet.objects.get(slug=slug) # This is where it should change
                form.save()

                return redirect('sheets:detail', slug=slug)
        else:
            form = forms.AddItem()
            form.sht = Sheet.objects.get(slug=slug)
        return render(request, 'sheets/addItem.html', { 'form': form, 'slug': slug })
    else:
        return redirect('sheets:list')

После сохранения формы, после просмотра в консоли администратора, sht никогда не изменяется и по-прежнему равен blank. Я подтвердил, что существует объект Sheet, когда views.py запускает Sheet.objects.get(slug=slug).

1 Ответ

0 голосов
/ 17 октября 2019

При вызове form.save () для формы модели он всегда возвращает экземпляр модели. Здесь вы хотите установить отношения для этого экземпляра.

Вы можете подумать, что изменяете одно и то же, но вы снова вызываете .save() в своей форме, что приведет к созданию нового экземпляра. не обращая внимания на то, что вы сделали раньше.

Это может решить вашу проблему:

if form.is_valid():
    instance = form.save(commit=False)
    instance.sht = Sheet.objects.get(slug=slug)
    instance.save()
    return redirect('sheets:detail', slug=slug)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...