Django ModelForm - получить значение от ManyToManyField - PullRequest
0 голосов
/ 07 июня 2018

Мне нужно получить выбранные значения года из PreceptorForm.Я могу получить internal_tel, используя post.internal_tel, но я не могу сделать это с годом, потому что это ManyToManyField.Мне нужно что-то вроде preceptor.year.add (post.year), но это дает мне ошибку.Каков наилучший способ сделать это?

models.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)

forms.py

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

views.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})

У меня есть эта ошибка в preceptor.year.add (post.year):

должно иметь значение для поля "id" перед этим отношением "многие ко многим"можно использовать.

...