我的模型是这样的:
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'”。谁能帮我一下
最佳答案
由于您在 View 中处理 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))
关于python - Django modelform 外键更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47002559/