关系选择¶小部件显示文本
relationship choices¶widget showing text
我想在我的 Test_Objekt 模特表格中显示 Test_Baustoff->艺术模特的选择。
现在我正在尝试用一个Widget来解决它...
型号:
class Test_Objekt(models.Model):
baustoffid = models.ForeignKey(Test_Baustoff, on_delete=models.CASCADE)
bezeichnung = models.CharField(max_length=100, default='', blank=True)
class Test_Baustoff(models.Model):
art = models.CharField(max_length=100)
wert = models.IntegerField(default='0')
表单:(在 django 文档中找到这段代码...不知道我是否以正确的方式使用它??)
class BaustoffidSelect(forms.Select):
def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
option = super().create_option(name, value, label, selected, index, subindex, attrs)
if value:
option['attrs']['data-art'] = value.instance.art
return option
class ObjektForm(forms.ModelForm):
class Meta:
model = Test_Objekt
fields = ['bezeichnung', 'baustoffid', 'bauweiseid', 'dickeaussenwand', 'dickedaemmung', 'fensterqualitaet']
labels = {'bezeichnung': 'Objekt-Bez'}
widgets = {'baustoffid': BaustoffidSelect}
html 模板:
<table class="table table-bordered table-light">
{{objekt_form.as_table}}
</table>
目前,我没有找到解决问题的方法。我看了一些教程或 Whosebug 问题,但到目前为止什么都没有。
你对这种处理有什么想法吗?
尝试添加具有模型对象实例的元组列表:
Baustoff_choices = []
for i in Test_Baustoff.objects.all():
Baustoff_choices.append(
(i.id,i.art)
) #second element is what is this what will be displayed in template
然后在你的 forms.ModelForm:
baustoffid = forms.ChoiceField(choices=Baustoff_choices)
哦,非常感谢。这适用于 id!
我已经在尝试这种方法,但犯了一个错误,我想将其应用到我的 模型中 ...我不知道我还可以添加一个额外的字段到我的 forms.modelform
我在问自己。
是否也可以不保存 id 而保存 foreykn 键对象
喜欢模特:
#baustoffid = models.ForeignKey(Test_Baustoff, on_delete=models.CASCADE)
形式为:
for i in Test_Baustoff.objects.all():
Baustoff_choices.append(
(**i**, i.art) # or somithing like **i.instance**
)
但我得到:
无法分配“'Test_Bauweise object (2)'”:“Test_Objekt.bauweiseid”必须是“Test_Bauweise”实例。
亲切的问候!
已解决。
错过了在我的 models.py 中添加此功能
所以它像“Object(1)”一样令人讨厌...
def __str__(self): return self.art
我想在我的 Test_Objekt 模特表格中显示 Test_Baustoff->艺术模特的选择。
现在我正在尝试用一个Widget来解决它...
型号:
class Test_Objekt(models.Model):
baustoffid = models.ForeignKey(Test_Baustoff, on_delete=models.CASCADE)
bezeichnung = models.CharField(max_length=100, default='', blank=True)
class Test_Baustoff(models.Model):
art = models.CharField(max_length=100)
wert = models.IntegerField(default='0')
表单:(在 django 文档中找到这段代码...不知道我是否以正确的方式使用它??)
class BaustoffidSelect(forms.Select):
def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
option = super().create_option(name, value, label, selected, index, subindex, attrs)
if value:
option['attrs']['data-art'] = value.instance.art
return option
class ObjektForm(forms.ModelForm):
class Meta:
model = Test_Objekt
fields = ['bezeichnung', 'baustoffid', 'bauweiseid', 'dickeaussenwand', 'dickedaemmung', 'fensterqualitaet']
labels = {'bezeichnung': 'Objekt-Bez'}
widgets = {'baustoffid': BaustoffidSelect}
html 模板:
<table class="table table-bordered table-light">
{{objekt_form.as_table}}
</table>
目前,我没有找到解决问题的方法。我看了一些教程或 Whosebug 问题,但到目前为止什么都没有。
你对这种处理有什么想法吗?
尝试添加具有模型对象实例的元组列表:
Baustoff_choices = []
for i in Test_Baustoff.objects.all():
Baustoff_choices.append(
(i.id,i.art)
) #second element is what is this what will be displayed in template
然后在你的 forms.ModelForm:
baustoffid = forms.ChoiceField(choices=Baustoff_choices)
哦,非常感谢。这适用于 id!
我已经在尝试这种方法,但犯了一个错误,我想将其应用到我的 模型中 ...我不知道我还可以添加一个额外的字段到我的 forms.modelform
我在问自己。 是否也可以不保存 id 而保存 foreykn 键对象
喜欢模特:
#baustoffid = models.ForeignKey(Test_Baustoff, on_delete=models.CASCADE)
形式为:
for i in Test_Baustoff.objects.all():
Baustoff_choices.append(
(**i**, i.art) # or somithing like **i.instance**
)
但我得到: 无法分配“'Test_Bauweise object (2)'”:“Test_Objekt.bauweiseid”必须是“Test_Bauweise”实例。
亲切的问候!
已解决。 错过了在我的 models.py 中添加此功能 所以它像“Object(1)”一样令人讨厌...
def __str__(self): return self.art