2017-04-21 3 views
0

Ich versuche, eine vorhandene Zeile meiner Datenbank zu ändern, ist es ein aus einer Zwischen Tabelle mit dem Namen „CharacterSkill“ mit einer einzigartigen zusammenen Einschränkung:ändern unique_together Form django gebunden

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

habe ich eine Form um das Niveau zu ändern, aber ich bin nicht in der Lage, das Formular zu speichern, ich habe zwei Fehlermeldungen aus beiden Bereichen „Charakter“ & „Geschicklichkeit“:

Select a valid choice. That choice is not one of the available choices. 

Can Helfen Sie bitte dabei? :)

Meine Form:

class SkillCreateForm(forms.ModelForm): 
    class Meta: 
     model = CharacterSkill 
     fields = ('skill','level','character',) 

meiner Sicht:

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,}) 

Antwort

0

basiert auf einem Buch, ich die Art und Weise änderte ich die Form begrenzt Instanz zu verwenden:

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,}) 
Verwandte Themen