簡體   English   中英

在 CreateView 中為 ManyToMany 字段定義自動保存方法時,錯誤顯示

[英]While defining method for autosaving in CreateView for ManyToMany field Error shows

我有三個模型,在第三個模型中外鍵和多對多字段是鏈接的,它們是:Personal_info Models.py

class Personal_info(models.Model):
    gen_choices = (
        ("पुरुष", "पुरूष"),
        ("महिला", "महिला"),
        ("तेस्रो", "तेस्रो"),
    )
    pinfo_id = models.AutoField(primary_key=True)
    userid = models.OneToOneField(User, on_delete=models.CASCADE)
    nfullname = models.CharField(validators=[max_len_check], max_length=128)
    efullname = models.CharField(validators=[max_len_check], max_length=128)
    dob_ad = models.DateField()
    dob_bs = models.DateField()
    gender = models.CharField(max_length=6, choices=gen_choices)
    citizen_no = models.CharField(max_length=56)
    cissue_dist = models.ForeignKey(District, on_delete=models.CASCADE)
    cissue_date = models.DateField()
    language = models.CharField(max_length=56)
    p_district = models.CharField(max_length=56)
    p_vdc = models.CharField(max_length=56)
    p_ward = models.CharField(max_length=2)
    p_city = models.CharField(max_length=56)
    t_district = models.CharField(max_length=56)
    t_vdc = models.CharField(max_length=59)
    t_ward = models.CharField(max_length=2)
    t_city = models.CharField(max_length=56)
    telephone = models.BigIntegerField(null=True, blank=True)
    mobile = models.BigIntegerField()
    mother_name = models.CharField(validators=[max_len_check], max_length=128)
    mother_cit = models.CharField(max_length=10, null=True)
    father_name = models.CharField(validators=[max_len_check], max_length=128)
    father_cit = models.CharField(max_length=10, null=True)
    gfather_name = models.CharField(validators=[max_len_check], max_length=128)
    gfather_cit = models.CharField(max_length=10, null=True)
    spose_name = models.CharField(validators=[max_len_check], max_length=128, null=True)
    spose_cit = models.CharField(max_length=10, null=True, blank=True)
    image = models.FileField(upload_to="photos/", null=True, blank=True)
    cit_image = models.FileField(upload_to="citizens/")
    inclu_image = models.FileField(upload_to="inclusions/", null=True)
    active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    objects = models.Manager
    def __str__(self):
        return str(self.efullname)

教育模型.py

class Education(models.Model):
    edu_id = models.AutoField(primary_key=True)
    userid = models.ForeignKey(User, on_delete=models.CASCADE)
    institute = models.CharField(max_length=255, validators=[max_len_check])
    board = models.CharField(max_length=128, validators=[max_len_check1])
    pexam = models.CharField(max_length=16, choices=exam_choices)
    faculty = models.CharField(max_length=16, choices=fac_choices)
    division = models.CharField(max_length=16, validators=[max_len_check2])
    tmarks = models.IntegerField()
    percent = models.FloatField(null=True, blank=True)
    mainsub = models.CharField(max_length=16, validators=[max_len_check2])
    image = models.FileField(upload_to="educations/", null=True, blank=True)
    active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    objects = models.Manager

    def __str__(self):
        return str(self.userid)

V_applied 模型.py

class V_applied(models.Model):
    appNo = models.IntegerField(null=True, blank=True, default=add_one)
    p_srlno = models.IntegerField(blank=True, null=0, default=0)
    userid = models.ForeignKey(User, on_delete=models.CASCADE)
    post = models.ForeignKey(Vacancy,on_delete=models.CASCADE)
    inclusive = models.ManyToManyField(Inclusive)
    bank = models.CharField(max_length=128)
    v_no = models.CharField(max_length=32, validators=[max_len_check1])
    dep_date = models.DateField()
    ser_fee = models.IntegerField()
    image = models.FileField(upload_to="vouchers/")
    personal_info = models.ForeignKey(Personal_info, on_delete=models.CASCADE, blank=True)
    education = models.ManyToManyField(Education, blank=True, default=0)
    active = models.BooleanField(default=True)
    status = models.CharField(max_length=10, validators=[max_len_check], default="Pending")
    remarks = models.CharField(max_length=56, validators=[max_len_check1], default="Pending")
    comment = models.CharField(max_length=128, validators=[max_len_check2], blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    objects = models.Manager

    @property
    def per_info(self):
        return (self.personal_info.efullname, self.personal_info.gender, )
    '''
    def __str__(self):
        return str(self.userid) + ':' + str(self.post)

在這里,我想在 CreateView 中為 V_applied 模型的 ForeignKey 和 ManyToMany 字段創建自動保存方法,為此我嘗試了 views.py,如下所示:@method_decorator(login_required(login_url='login'), name='dispatch')

class v_appliedadd(CreateView):
    form_class = V_appliedForm
    template_name = 'v_applied/v_applied_form.html'
    success_url = '/v_applied/vapp_details/'

    def form_valid(self, form):
        form.instance.userid = self.request.user
        form.instance.personal_info = Personal_info.objects.get(userid=self.request.user)
        educationall = Education.objects.filter(userid=self.request.user)
        for edu in educationall:
            form.instance.education.add(edu)
        return super().form_valid(form)

保存數據時錯誤顯示如下:

ValueError at /v_applied/v_appliedadd/
"<V_applied: testuser>" needs to have a value for field "id" before this many-to-many relationship can be used.
Request Method: POST
Request URL:    http://localhost:8000/v_applied/v_appliedadd/
Django Version: 3.0.8
Exception Type: ValueError
Exception Value:    
"<V_applied: testuser>" needs to have a value for field "id" before this many-to-many relationship can be used.
Exception Location: C:\Users\User\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\fields\related_descriptors.py in __init__, line 846
Python Executable:  C:\Users\User\AppData\Local\Programs\Python\Python38\python.exe
Python Version: 3.8.1
Python Path:    
['D:\\DjangoProject\\app_epf',
 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip',
 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python38\\DLLs',
 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python38\\lib',
 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python38',
 'C:\\Users\\User\\AppData\\Roaming\\Python\\Python38\\site-packages',
 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages']
Server time:    Mon, 14 Sep 2020 23:09:21 +0545

我是 python-django 的新手,請幫助我如何解決它。

form.instance.userid = self.request.user
form.instance.personal_info = Personal_info.objects.get(userid=self.request.user)
instance_from = form.save()
educationall = Education.objects.filter(userid=self.request.user)
for edu in educationall:
    instance_edu = Education.objects.get(pk=edu.pk)
    instance_from.education.add(instance_edu)
instance_from.save()
return super().form_valid(form)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM