gpt4 book ai didi

python - 在 Django 选择表单的模型选择字段中列出各种模型属性

转载 作者:行者123 更新时间:2023-11-30 23:07:21 25 4
gpt4 key购买 nike

模型.py

from django.db import models

class Sample(models.Model):
sample_ID = models.CharField(max_length=20)
sample_name = models.CharField(max_length=30)


def __unicode__(self):
return self.sample_ID

class Meta:
ordering = ['id']

表单.py

from django import forms
from chosen import forms as chosenforms
from .models import Sample

class SampleLookupForm(forms.Form):
Sample_ID = chosenforms.ChosenModelChoiceField(queryset=Sample.objects.all())

class SampleNameLookupForm(forms.Form):
def __init__(self):
samples = Sample.objects.all().values_list('sample_name', flat=True)
sample_tuple = [(i, i) for i in samples]
self.fields['Sample_Name'] = chosenforms.ChosenChoiceField(sample_tuple)

这里我有两个表单,其中一个我想在下拉菜单中显示所有示例 ID。另一个我想显示所有示例名称。

对于样本 ID,这很容易,因为我已经定义了 unicode 方法来返回样本 ID。但是,我不知道如何调整模型、表单或 View 来创建包含示例名称的下拉菜单(即除 unicode 方法中返回的模型属性之外的模型属性。)

如何允许模型选择字段显示 unicode 方法中定义的模型属性之外的模型属性?

或者,我应该定义 unicode 方法,以便根据某些条件返回某个模型属性。

我应该提到,这里我使用 django chosen forms其行为与 Django 模型表单非常相似,只是增加了一些功能。

我通过以下代码收到的具体错误消息是:

__init__() takes exactly 1 argument (2 given)

最佳答案

我不确定您的 ChosenModelChoiceField,我假设它是 ModelChoiceField 的子类,您应该覆盖 label_from_instance 方法字段:

class BlahChoiceField(chosenforms.ChosenModelChoiceField):
def label_from_instance(self, obj):
# return whatever text you want
return obj.sample_name

然后对于您所做的定义:

sample_id = BlahChoiceField(queryset=Sample.objects.all())

django doc .

编辑:

您的原始代码位于正确的路径上,但您的代码在这一行上是错误的:

self.fields['Sample_Name'] = chosenforms.ChosenChoiceField(sample_tuple)

应该是:

self.fields['Sample_Name'] = chosenforms.ChosenChoiceField(choices=sample_tuple)

关于python - 在 Django 选择表单的模型选择字段中列出各种模型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32259854/

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