Django:异常值:无法分配:" Visit.fk_visit_main"必须是" Main"实例

时间:2018-06-07 00:55:13

标签: django python-3.x foreign-keys django-class-based-views

用户位于具有id(父表/模型)的患者的DetailView中,或者选择患者来创建子(表/模型)对象(我希望这是准确的术语)。 我试图"预先填充"我的表单与父表中的正确外键。基本上,每位患者都会有几次就诊,并且访问需要与患者表("主要"模型)具有正确的外键关系。

我在def form_valid文件中收到与views.py命令相关的以下错误。如果我删除此命令,则会收到not null错误,因为该字段需要填写。

错误

Cannot assign "2": "Visit.fk_visit_main" must be a "Main" instance.

SQLite3内容

第一列是主键(2)。只是为了表明它确实存在于我的数据库中。

sqlite> select * from clincher_main;
2|Jake Peralta|06/07/1983|
3|Nicolas Smoll|06/07/1983|
4|Rosa Diaz|07/09/1979|

Models.py

from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User


class Main(models.Model):
    name = models.CharField(max_length = 256)
    date_of_birth = models.CharField(max_length = 256)
    age = models.CharField(max_length=4)

    def get_absolute_url(self):
        return reverse('clincher:main-detail', kwargs={'pk': self.pk})

    def __str__(self):
        return self.name + ' - ' + self.date_of_birth


class Visit(models.Model):
     fk_visit_main = models.ForeignKey(Main, on_delete=models.CASCADE, verbose_name=('Patient Name'))
    visit_date = models.DateField(auto_now = True, editable=True)
    fk_visit_user = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name=('Practitioner'), max_length=500)

def __str__(self):
    return '%s %s' % (self.visit_date, self.visit_label)

def get_absolute_url(self):
    return reverse('clincher:main-detail', kwargs={'pk': self.pk})

Views.py

class VisitCreate(CreateView):
    model = Visit
    fields = [ 'visit_label', 'visit_type', 'visit_progress_notes']

    def form_valid(self, form):
        form.instance.fk_visit_user = self.request.user **Error Here**
        form.instance.fk_visit_main = self.kwargs['pk']
        return super(VisitCreate, self).form_valid(form)

    def get_success_url(self):
        return reverse('clincher:main-detail', args={'pk': self.object.id})

0 个答案:

没有答案