Estoy tratando de modificar una fila existente de mi base de datos, es de una tabla intermedia llamada "CharacterSkill" con una restricción conjunta única:
modelos.py
class CharacterSkill(models.Model): character = models.ForeignKey(Character, on_delete=models.CASCADE) level = models.IntegerField(default=0) skill = models.ForeignKey(Skill, on_delete=models.CASCADE) class Meta: unique_together = ("character","skill")Hice un formulario para cambiar el nivel pero no puedo guardar el formulario, tengo dos mensajes de error de ambos campos "carácter" y "habilidad":
Select a valid choice. That choice is not one of the available choices.¿Puedes ayudar en eso por favor? :)
Mi formulario:
class SkillCreateForm(forms.ModelForm): class Meta: model = CharacterSkill fields = ('skill','level','character',)mi vista :
def skill_update(request,skillpk,instancepk): form = SkillCreateForm(request.POST) user = User.objects.get (id = request.user.id) instance = Character.objects.get (id = instancepk) skill = CharacterSkill.objects.get(id = skillpk) data = {'character' : instance, 'skill' : skill.skill, 'level' : skill.level, } if form.is_valid(): form.save() return redirect('persomaker:skill_list', instance.id) else: form = SkillCreateForm(data) #form.fields['skill'].widget = HiddenInput() #form.fields['character'].widget = HiddenInput() return render(request, 'character/create_skill.html', {'instance':instance, 'skill':skill, 'form': form,})basado en un libro, cambié la forma en que limité el formulario para usar la instancia:
def skill_update(request,skillpk,instancepk): user = User.objects.get (id = request.user.id) instance = Character.objects.get (id = instancepk) skill = CharacterSkill.objects.get(id = skillpk) if request.method == "POST": form = SkillModifyForm(request.POST,instance = skill,) print (skill) if form.is_valid(): form.save() return redirect('persomaker:skill_list', instance.id) else: form = SkillModifyForm(instance = skill,) return render(request, 'character/create_skill.html', {'instance':instance, 'skill':skill, 'form': form,})