簡體   English   中英

Django保存多對多字段-無默認值

[英]Django Save Many to Many Field - no default value

我已經嘗試了一個多星期,使用save(commit = False)保存一個新的模型對象,該對象具有一個ManyToMany字段,但是我一直遇到相同的錯誤。 我已經嘗試了10種以上的方法,但仍無法解決。 在此先感謝您的幫助! 請參閱下面的相關代碼:

DatabaseError at /createRezidio/ (1364, "Field 'vquestions' doesn't have a default value")

    ['/Users/matthewbaron/Desktop/Nonsense/Loeb Land/source/commapp',
     '/Library/Python/2.7/site-packages/virtualenv-1.9.1-py2.7.egg',
     '/Library/Python/2.7/site-packages/setuptools-5.4.1-py2.7.egg',
     '/Library/Python/2.7/site-packages/distribute-0.6.28-py2.7.egg',
     '/Library/Python/2.7/site-packages/MySQL_python-1.2.4-py2.7-macosx-10.9-intel.egg',
     '/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC',
     '/Library/Python/2.7/site-packages',
     '/Library/Python/2.7/site-packages/PIL']

models.py

class Questions(models.Model):
    userId = models.ForeignKey(User)
    question = models.TextField()
    approved = models.BooleanField(default=False)

    def __unicode__(self):
        return "%s" % (self.question)

class Profiles(models.Model):
    userId = models.ForeignKey(User)
    university = models.CharField(max_length = 60)
    universityYear = models.CharField(max_length = 60, choices=GRADE_CHOICES)
    gpa = models.DecimalField(max_digits = 4, decimal_places = 3, validators=   [MinValueValidator(0), MaxValueValidator(5)])
    major = models.CharField(max_length = 60)
    resumeText = models.TextField(help_text = 'Paste text of resume here:')
    vquestions = models.ManyToManyField(Questions, blank = True, null = True, choices = VID_QUESTIONS)
    resumeFile = models.FileField(upload_to = file_name_resume)
    video1 = models.FileField(upload_to = file_name_video1)
    video2 = models.FileField(upload_to = file_name_video2)
    video3 = models.FileField(upload_to = file_name_video3)
    video4 = models.FileField(upload_to = file_name_video4)
    userPhoto = models.ImageField(upload_to = file_name_photo)

    def __unicode__(self):
        return "%s, %s, %s, %s, %s, %s, 

views.py

def createRezidio(request):

    if request.method == 'POST':
        form = AutoRezidioForm(request.POST, request.FILES)
        if form.is_valid():
            newprof = form.save(commit=False)
            newprof.userId = request.user
            newprof.save()

            return HttpResponseRedirect("/viewRezidio/")
    else:
        form = AutoRezidioForm() # A empty, unbound form

    if request.user.groups.filter(name="recruiter").count() > 0:
        return render_to_response(
            "users/base_rezidio.html",
            {'form': form, 'type' : 'recruiter'},
            context_instance=RequestContext(request)
        )

        return render_to_response(
            "users/base_rezidio.html",
            {'form': form, 'type' : 'student'},
            context_instance=RequestContext(request)
        )

表格

class AutoRezidioForm(ModelForm):   
    class Meta:
        model = Profiles
        exclude = ['userId']
    vquestions = forms.ModelMultipleChoiceField(queryset = Questions.objects.all().filter(approved = True), widget=SelectMultiple)

在此:

vquestions = models.ManyToManyField(Questions, blank = True, null = True, choices = VID_QUESTIONS)

嘗試使用limit_choices_todocs )而不是使用choices =定義一組choices = 這可以在模型上完成,並且會影響使用該模型的所有模型形式上的可用選擇。 這也意味着您不必在forms.py中定義查詢集。 您可以將其他參數傳遞給limit_choices_to以僅允許與已批准問題關聯。

由於您正在使用commit = False且表單涉及多對多字段,因此我相信您還需要使用save_m2m( docs )才能正確保存內容。

暫無
暫無

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

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