ユーザーがデータベース内のレコードを更新できるように、データベース内のレコードを管理しようとしています。現在、私の実装では、テーブルにレコードが存在するかどうかを確認してい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)