Django ModelForm从ManyToManyField获取价值

2024-03-28 21:28:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从PreceptorForm中获取所选的年度值。我可以用电话打内部电话邮政内部电话但我不能这么做,因为这是一个多领域。我需要这样的东西训导员.year.add(年后)但这给了我一个错误。最好的方法是什么?你知道吗

你知道吗型号.py你知道吗

class Year(models.Model):
    year_number = models.IntegerField(choices=YEAR_CHOICES)
    division = models.CharField(choices=DIVISION_CHOICES, max_length=1)

    def getStudents(self):
        results = Student.objects.filter(year=self)
        return results

    def __str__(self):
        return "{}-{}".format(self.year_number, self.division)

class Preceptor(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete = models.CASCADE)
    internal_tel = models.IntegerField(blank=True)
    year = models.ManyToManyField(Year,blank=True,related_name='preceptores')

    def getYear(self):
        results = self.year.all()
        return results

    def __str__(self):
        return "{} {}".format(self.user.first_name, self.user.last_name)

你知道吗表单.py你知道吗

class PreceptorForm(ModelForm):
    class Meta: 
        model = Preceptor
        fields = '__all__'
        exclude = ['user']  

你知道吗视图.py你知道吗

def register_user(request):
    if request.method == "POST":
        form = PreceptorForm(request.POST)
        username = request.POST['username']
        password = request.POST['password']
        sec_pass = request.POST['sec_password']
        email = request.POST['email']
        first_name = request.POST['first_name']
        last_name = request.POST['last_name']
        if form.is_valid(): 
            if password == sec_pass:
                user = User.objects.create_user(username, email, password)
                user.is_active = True
                user.first_name = first_name
                user.last_name = last_name
                user.save()
                print "form"
                post = form.save(commit=False) 
                post.user = user
                preceptor = Preceptor(user=user,internal_tel=post.internal_tel)
                preceptor.save()
                preceptor.year.add(post.year)
                preceptor.save()
            return redirect('/')
    else:
        form = PreceptorForm()
    return render(request, 'register.html', {'form': form})

我现在犯了这个错误训导员.year.add(年后)地址:

<;Preceptor:'name'>;需要有字段“id”的值,才能使用此多对多关系。你知道吗


Tags: nameselfformreturnmodelsrequestdefpassword