以Django模型形式显示“伪”查询集组名称-SelectMultiple

时间:2018-10-29 11:02:03

标签: python django django-forms django-managers

您好,我是django dev初级,我将感谢您的帮助! 我有这样的django小组:

  

“超级组”,“超级组”,“ test_1”,“ test_2”,“ test_7”,“ Nice”   组”,“ test_16”(....)

组test_X通过X(id)与包含其标题的另一个模型相关联。那意味着我可以做这样的事情:

x = Groups.objects.get(pk=6) # getting group of name "test_6"
x.rel_group.title # shows "Super title" instead of "test_6"

我有一个经理,可以将test_X组的名称更改为相关的对象标题,并返回专门准备好的查询集...只是为了正确显示它,而无需更改数据库:

class AllGroupsManager(models.Manager):
    def get_queryset(self):
        queryset = super(AllGroupsManager, self).get_queryset().exclude(rel_group__start_date__lte=datetime.now()-timedelta(days=3))
        for number, t in enumerate(queryset):
            if 'test_' in t.name:
                t.name = t.rel_group.title
    return queryset

这是我的模型表格:

class TestForm(forms.ModelForm):
    class Meta:
        model = Test
        fields = (
            'title', 'price', 'body', 'group', 
        )
    widgets = {
        'title': forms.TextInput(attrs={'class': 'form-control'}),
        'price': forms.NumberInput(attrs={'class': 'form-control', 'min': 0.0}),
        'body': forms.Textarea(attrs={'class': 'form-control'}),
        'group': forms.SelectMultiple(attrs={'class': 'form-control chosen', 'data-placeholder': 'Wybierz grupę'}),
}
    def __init__(self, *args, **kwargs):
        super(TestForm, self).__init__(*args, **kwargs)
        self.fields['group'].queryset = Group.get_all.all() # using my manager here 
        print(self.fields['group'].queryset) # I can see that all group names are changed from test_X to specyfic names like "Great name"

内部,我正在“组字段查询集”(它具有小部件SelectMultiple)上使用我的管理器,因此我准备了具有更改名称的准备好的查询集。

我在内部打印此查询集,以检查是否一切正常。 它是...所有test_x名称都被替换为相关的对象标题。

因此,我在视图中创建了此表单并将其打印以进行检查:

form = TestForm()
print(form)

我可以看到在准备表单时打印出的所有特别准备的组名称都被重置为“ test_X” ... 我不知道何时以及为什么要重置...

在此之前,我尝试使用.update()queryset方法,但它更新了数据库。我只需要正确显示它...无需更改数据库,但不知道我可以做些什么来修复它:(

我将不胜感激!

0 个答案:

没有答案