2017-10-29 12 views
1

私はこのように私のモデルを持っている:ジャンゴModelFormサブクラスのForeignKey更新

class Event(models.Model): 
    EventId = models.UUIDField(primary_key=True) 
    Winner = models.ForeignKey('Participant', on_delete=None) 

class Participant(models.Model): 
    ID = models.UUIDField(primary_key=True) 
    Name = models.CharField() 

私はform.py

class UpdateWinner(ModelForm): 
    def __init__(self, *args, **kwargs): 
     e = kwargs.pop('e', '') 
     super(UpdateWinner, self).__init__(*args, **kwargs) 
     self.fields['Winner'] = forms.ModelChoiceField(queryset=e)) 

    class Meta: 
     model = Event 
     fields = '__all__' 

やビュー内でこれを使用して、イベントオブジェクトの既存のインスタンスを更新しようとしています。 py

def update_winner(request, event_id): 
     if request.method == 'POST': 
      form = UpdateWinner(request.POST, instance=Event.objects.get(EventId=event_id)) 
      if form.is_valid(): 

     else: 
      event_par = Participant.objects.filter(some query) 
      form = UpdateWinner(instance=event, e=event_par) 

私はeventidを印刷してチェックしましたが、正しい値が渡されています。何らかの理由でWinnerフィールドがform.is_valid()関数で何らかのエラーを引き起こしていて、 "str 'オブジェクトに' model '属性がありません。誰でもここで私を助けることができます

+1

コードに複数の構文と字下げのエラーがあります。完全なエラーメッセージと説明も入力していません。 –

答えて

1

ビューでPOST要求を処理するときにe kwargを指定しないため、カスタム__init__ファンクションはe = ''に設定されます。これにより、クエリーセットを定義するときにエラーが発生します。空の文字列には属性がありませんmodel。試してみてください:

class UpdateWinner(ModelForm): 
    def __init__(self, *args, **kwargs): 
     e = kwargs.pop('e', None) 
     super(UpdateWinner, self).__init__(*args, **kwargs) 
     if e is not None: 
      self.fields['Winner'] = forms.ModelChoiceField(queryset=e)) 
+0

50秒で私を傷つけたhaha – scharette

0

エラーがその行を使用してから来ている:キーekwargsリターン '' にない場合、これが意味

e = kwargs.pop('e', '') 

。次に、それを使用します。

self.fields['Winner'] = forms.ModelChoiceField(queryset=e)) 

この結果、空のクエリセットになります。

関連する問題