我的模型如下:
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
更新Event对象的现有实例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__'
和views.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'”。任何人都可以帮助我吗
答案 0 :(得分: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))
答案 1 :(得分:0)
错误来自使用该行:
e = kwargs.pop('e', '')
这意味着,如果密钥e
不在kwargs
返回''。然后你在那里使用它:
self.fields['Winner'] = forms.ModelChoiceField(queryset=e))
导致空的查询集。