Django - начальная модель модели - PullRequest
0 голосов
/ 04 апреля 2019

Я хотел бы зафиксировать начальное значение модели (поток модели), используя данные из другой модели (элемент). Хотя это не похоже на работу. Поскольку instance_cf.feeder должен работать на модели Flow, у меня сложилось впечатление. Как я могу решить это ??

спасибо всем

models.py:

class Item(models.Model):
   feeder = models.CharField(max_length=100)

(...)

class Flow(models.Model):
   feeder = models.ForeignKey(Item, default="None", on_delete=models.CASCADE)

(...)

views.py:

def create_flow(request, itemslug):


 a = Item.objects.get(slug=itemslug).feeder

 if request.method == 'POST':
    cf = FlowForm(request.POST)

    if cf.is_valid():
        instance_cf = cf.save(commit=False)
        instance_cf.feeder = a
        instance_cf = cf.save()
        messages.success(request, 'Flow successfully added!')
        return redirect('items:create_flow', itemslug =itemslug) 
 else:
    cf = FlowForm()

 return render(request, 'items/create_flow.html', {'cf': cf})

сообщение об ошибке:

Невозможно назначить «XXXX»: «Flow.feeder» должен быть экземпляром «Item».

1 Ответ

0 голосов
/ 04 апреля 2019

Вы присваиваете значение поля Item 'едока' переменной 'a' вместо фактического экземпляра Item, затем вы пытаетесь назначить эту переменную 'a' (которая должна быть экземпляром Item) для поля в Flowкоторая является моделью FK to Item (и ей должен быть присвоен экземпляр Item).

измените ее на

 a = Item.objects.get(slug=itemslug)

Также

class Flow(models.Model):
    feeder = models.ForeignKey(Item, default="None", on_delete=models.CASCADE)

довольно странно, что вы присваиваете текстовое значение по умолчанию для поля ForeignKey (это может быть не просто «странно», а прямо не разрешено)

Вы должны что-то сделатьбольше похоже на

class Flow(models.Model):
    feeder = models.ForeignKey(Item, null=True, blank=True, on_delete=models.CASCADE)

или в соответствии с вашим текущим соглашением

class Flow(models.Model):
    feeder = models.ForeignKey(Item, default=Item.objects.get(feeder="None"), on_delete=models.CASCADE)

Я думаю, у вас возникли небольшие проблемы с пониманием того, как работают отношения FK.

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