python - Django modelform 外键更新

标签 python django django-models django-forms django-views

我的模型是这样的:

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/

相关文章:

python - BeautifulSoup 返回 noneType

python - 识别 x 数组索引的范围以将相应的 y 数组值设置为零

django - Elasticsearch DSL添加外键

python - 如何使用 sqlite 在 pytest 中启用外键检查

python - Django 多语言网站

python - 如何在 Django 1.9 中传递 callable

python - 如何在kivy窗口中放置两个按钮?

python - 无法使用 Django Rest Framework 序列化 AnonymousUser 对象 - 缺少属性

python - Django 表单 - clean_data KeyError

mysql - Django (42000) : Invalid default value for 'action_time'