Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django CreateView保存问题?_Django - Fatal编程技术网

Django CreateView保存问题?

Django CreateView保存问题?,django,Django,我有三种型号 #Peronal_信息模型: class Personal_info(models.Model): 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)

我有三种型号

#Peronal_信息模型:

class Personal_info(models.Model):
    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)
    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)
    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)
    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)
教育模式: V_应用模型: #要在许多字段(即perosnal_信息和教育字段)中自动保存数据,在views.py的CreateView类中有一个函数form_valid()

@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)
        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()
        instance_from.save_m2m()
        return super().form_valid(form)
这里的问题是,当执行此函数时,错误显示,但在检查插入的表数据时,如何使无错误?错误是:

AttributeError at /v_applied/v_appliedadd/
'V_applied' object has no attribute 'save_m2m'
Request Method: POST
Request URL:    http://localhost:8000/v_applied/v_appliedadd/
Django Version: 3.0.8
Exception Type: AttributeError
Exception Value:    
'V_applied' object has no attribute 'save_m2m'
Exception Location: D:\DjangoProject\app_epf\v_applied\views.py in form_valid, line 50
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:    Sun, 20 Sep 2020 22:42:21 +05

未解决此问题,请帮助解决。

您需要使用form.save_m2m()而不是instance.save_m2m() 如果需要绕过该错误,可以使用异常,但我不建议您:

try:
    //smth
except AttributeError :
   // smth
如果将commit=false作为参数传递给.save方法,则save_m2m()方法仅添加到保存的ModelForm对象中。在您的代码中,您从未这样做过,因此您正在调用。不必要地保存。由于保存的模型表单中不存在save_m2m方法,因此会出现错误

要解决错误,只需删除save_m2m的调用;不需要它,它会抛出一个错误,因为该方法从未在对象上创建过。(值得注意的是,您也碰巧在错误的对象上调用了.save_m2m:应该在ModelForm实例上调用它,而不是在您的帖子的注释中已经提到的新的Model类对象上调用它;但是在将其更改为表单后仍然会出现错误,因为.save_m2m方法在您的表单中不存在)


如果以前保存表单时使用commit=False作为参数传递--可能是因为在将新创建的对象保存到数据库之前需要对其进行一些额外的修改--并且对象包含许多连接,然后需要手动保存新对象,然后调用ModelForm实例上的save_m2m。但是,在您的代码中,没有使用commit=False,并且此步骤不是必需的,这样做会导致您收到错误。

instance\u from=form.save()
不是表单,而是表单中包装的实例,因此您应该使用
form.save\u m2m()
,而不是
instance\u form.save\u m2m()
。感谢您的建议,即使在显示了“form.save_m2m()”错误后,我也尝试了。感谢您的建议。即使在保留了“form.save_m2m()”之后,我也尝试了它,显示了相同的错误。是否有其他方法在m2m字段中自动保存而不是我的函数?请提出你的建议。
AttributeError at /v_applied/v_appliedadd/
'V_applied' object has no attribute 'save_m2m'
Request Method: POST
Request URL:    http://localhost:8000/v_applied/v_appliedadd/
Django Version: 3.0.8
Exception Type: AttributeError
Exception Value:    
'V_applied' object has no attribute 'save_m2m'
Exception Location: D:\DjangoProject\app_epf\v_applied\views.py in form_valid, line 50
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:    Sun, 20 Sep 2020 22:42:21 +05
try:
    //smth
except AttributeError :
   // smth
instance_from.save_m2m()    # remove this entire line