在表单中查询已清理数据库的模型数据

2024-10-06 12:44:41 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有forms.py,如下所示:

from django import forms
from .models import SipExtension
from xmpp.models import xmpp_buddy_groups

class ExtensionForm(forms.Form):
    xmpp_buddy_groups_choices = xmpp_buddy_groups.objects.values_list('group_name',flat=True)


    boolean_choices=(('Yes','Yes'),('No','No'))
    sip_extension = forms.IntegerField(min_value=0,max_value=100000)
    sip_secret = forms.CharField(required=True,max_length=32)
    commlink_push = forms.ChoiceField(choices=boolean_choices,widget=forms.CheckboxSelectMultiple,required=True)
    real_name = forms.CharField(required=True,max_length=32)
    xmpp = forms.ChoiceField(choices=boolean_choices,widget=forms.CheckboxSelectMultiple,required=True)
    xmpp_username = forms.CharField(required = True,min_length=5)
    xmpp_password = forms.CharField(max_length=32, widget=forms.PasswordInput)
    xmpp_buddy_groups_names = forms.MultipleChoiceField(choices=xmpp_buddy_groups_choices,widget=forms.CheckboxSelectMultiple,required=False)

如果我的数据库已经由以前的迁移创建,那么它可以正常工作。但当我的数据库为空时,我面临着这个问题。为了进行测试,我删除了所有表,然后运行make migrations,得到以下错误:

django.db.utils.ProgrammingError: relation "extensions_sipextension" does not exist
LINE 1: ...p_buddy_groups_names"."xmpp_buddy_groups_id" FROM "extension...

当我需要在全新的系统上部署时,我在空白数据库上处理这个问题时遇到了问题。我可以通过注释URL来处理这个问题,URL正在执行需要这个表单的视图,但这是一个糟糕的临时解决方法。如何解决这个问题


Tags: fromimporttruerequiredxmppformswidgetlength
1条回答
网友
1楼 · 发布于 2024-10-06 12:44:41

我认为问题在于表单中的xmpp_buddy_groups_choices属性。查询集在项目加载时进行评估。因此,当您使用./manage.py makemigrations时,xmpp_buddy_groups_choices会尝试计算queryset,但失败,因为数据库中没有表。尝试将选项包装到函数中,并在choices参数中传递该函数

而且choices必须是元组列表(包含2个元素),但是xmpp_buddy_groups_choices是字符串列表

示例代码:

class ExtensionForm(forms.Form):
    @staticmethod
    def get_group_choices():
        xmpp_buddy_groups_choices = xmpp_buddy_groups.objects.values_list('group_name',flat=True)
        return xmpp_buddy_groups_choices


    boolean_choices=(('Yes','Yes'),('No','No'))
    sip_extension = forms.IntegerField(min_value=0,max_value=100000)
    sip_secret = forms.CharField(required=True,max_length=32)
    commlink_push = forms.ChoiceField(choices=boolean_choices,widget=forms.CheckboxSelectMultiple,required=True)
    real_name = forms.CharField(required=True,max_length=32)
    xmpp = forms.ChoiceField(choices=boolean_choices,widget=forms.CheckboxSelectMultiple,required=True)
    xmpp_username = forms.CharField(required = True,min_length=5)
    xmpp_password = forms.CharField(max_length=32, widget=forms.PasswordInput)
    xmpp_buddy_groups_names = forms.MultipleChoiceField(choices=ExtensionForm.get_group_choices,widget=forms.CheckboxSelectMultiple,required=False)

相关问题 更多 >