gpt4 book ai didi

python - Django modelform 外键更新

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:13 25 4
gpt4 key购买 nike

我的模型是这样的:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com