I have seen multiply topics about this error on this form but i didn’t find the answer for my problem.
I have a form with a selectfield that dynamicly change, with a AJAX call, and got shown with a modal.
When closed the form must be saved. I already have it working with a textfield. but with a Selectfield i got the error
ValueError: Cannot assign “2”: “SubTeam_User.team” must be a “Team” instance.
Is there someone with a idea for a solution?
model.py
class SubTeam(models.Model):
title = models.CharField(max_length=32)
team = models.ForeignKey(Team, on_delete=models.CASCADE)
color = ColorField(format="hexa",default='#b3b3b3ff')
class Meta:
ordering = ['title']
def __str__(self):
return self.title
class SubTeam_User(models.Model):
subteam = models.ForeignKey(SubTeam, on_delete=models.CASCADE, related_name='subteams')
team = models.ForeignKey(Team, on_delete=models.CASCADE, related_name='subteam_teams')
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='subteam_users')
default = models.BooleanField()
def __str__(self):
return f"{self.user} - {self.subteam}"
forms.py
class SubteamUserForm (forms.ModelForm):
team = forms.IntegerField(widget=forms.HiddenInput)
teammember = forms.IntegerField(widget=forms.HiddenInput)
subteam = forms.ModelChoiceField(queryset=None,widget=forms.Select(attrs={"class":"form-control"}),initial="0")
class Meta:
model = SubTeam_User
fields = ['subteam', 'team', 'teammember']
def __init__(self, team, *args, **kwargs):
super(SubteamUserForm, self).__init__(*args, **kwargs)
self.fields['subteam'].queryset = SubTeam.objects.filter(team=team)
views.py
def subteam_user (request, team='', teammember=''):
if request.method == 'POST':
form = SubteamUserForm(team, request.POST)
if form.is_valid():
team = get_object_or_404(Team, id=form.cleaned_data['team'])
teammember = get_object_or_404(CustomUser, id=form.cleaned_data['teammember'])
subteam = form.cleaned_data['subteam']
reg, created = SubTeam_User.objects.update_or_create(
user=teammember,
team=team,
default=True,
defaults={
'subteam': subteam,
}
)
response = {'subteam': reg.subteam, 'team': reg.team.id, 'teammember':reg.user.id}
return JsonResponse(response, status=200)
else:
errors = form.errors.as_json()
return JsonResponse({"errors": errors}, status=400)