0

ユーザーがデータベース内のレコードを更新できるように、データベース内のレコードを管理しようとしています。現在、私の実装では、テーブルにレコードが存在するかどうかを確認していStateOptionます。存在する場合、インスタンスはstateoptionです。レコードが存在しない場合、インスタンスはstateです。フォームが検証されると、インスタンスに応じて、新しいレコードが作成されるか、既存のレコードが更新されます。レコードを更新すると、次のエラーが発生します。

Cannot assign "1": "StateOptionOutcome.stateoption" must be a "StateOption" instance.

インスタンスが必要なことは理解していStateOptionますが、私のフォームはStateインスタンスを使用しているため、この問題を回避する方法がわかりません。何か案は?

ビュー.py

def stateoptionoutcome(request, disease_id, state_id):
    state = get_object_or_404(State, pk=state_id)
    disease = get_object_or_404(Disease, pk=disease_id)

    #instansiate treatment outcomes
    stateoptionlist = StateOption.objects.filter(partstate_id=state_id) 
    if not stateoptionlist:
        stateoption = state #pass the state instance if there is no record of outcomes
    else: 
        stateoption = stateoptionlist[0]

    if request.method == "POST":
        optionForm = SelectOptionForStateForm(request.POST, disease=disease, instance=stateoption)


        if optionForm.is_valid(): 

           #Saves user options to database
           for option_id in request.POST.getlist('relevantoption'):
               if not StateOption.objects.filter(partstate=state):
                   state_option = StateOption.objects.create(partstate=state, partoption_id=int(option_id))
               else:
                   state_option = StateOption.objects.filter(partstate=state).update(partoption=int(option_id))

models.py

class State(models.Model):
       state = models.CharField(max_length=255)
       relevantdisease = models.ForeignKey(Disease)
       relevantoption = models.ManyToManyField(Option, through='StateOption')

class StateOption(models.Model):
       partstate = models.ForeignKey(State)
       partoption = models.ForeignKey(Option)
       relevantoutcome = models.ManyToManyField(Outcome, through='StateOptionOutcome')

class StateOptionOutcome(models.Model):
       stateoption = models.ForeignKey(StateOption)
       relevantoutcome = models.ForeignKey(Outcome)
       outcomevalue = models.CharField(max_length=20)
4

0 に答える 0