我在Django中有以下3个模型。
models.py
=============
class Customer(models.Model):
name = models.CharField(max_length=255, null=False, unique=True)
class Service(models.Model):
name = models.CharField(max_length=255, null=False)
architecture = models.NameField()
class customer_services(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, null=True, related_name='customer_service_entries')
service = models.ForeignKey(Service, on_delete=models.SET_NULL, null=True, related_name='customer_service_entries')
start = models.DateField()
end = models.DateField()
字符串
我有以下表格:
forms.py
==============
class CustomerForm(ModelForm):
class Meta:
model = Customer
fields = ["name"]
class CustomerServiceForm(ModelForm):
class Meta:
model = customer_services
fields = ["service", "start", "end"]
class ServiceForm(ModelForm):
class Meta:
model = Service
fields = ["name", "architecture"]
型
我试图有一个表单,我可以添加服务的客户,我遇到的问题是,该表单将只显示字段从CustomerServiceForm。我遇到的问题是,在服务表,我可以有多个服务具有相同的名称,但不同的架构,但是我没有办法在表单中显示它。所以假设我在Service表中有以下值:
services table
==============
id || name || architecture
1 || Test || 32Bit
2 || Test || 64Bit
3 || AnotherTest || 32Bit
4 || AnotherTest || 64bit
5 || TestTwo || 32Bit
型
本质上,我想做的是能够在表格中显示这样的东西
<select name="services" id="services">
<option value="1">Test - 32Bit</option>
<option value="2">Test - 64Bit</option>
<option value="3">AnotherTest - 32Bit</option>
<option value="4">AnotherTest - 64Bit</option>
<option value="5">TestTwo - 32Bit</option>
</select>
型
我如何在select中显示架构,我无法找到一种方法让它显示在表单中,因为它不是模型的一部分。
2条答案
按热度按时间eivgtgni1#
如果我理解正确的话,那么我只需要在你的服务模型中添加一个额外的字段,它将合并的名称和架构字段组合在一起,并在表单中访问该字段。下面将添加一个保存方法,它将在你每次保存服务的模型示例时为你创建值。在模型下面添加
__str__
方法将告诉django,当引用这个模型时,它应该返回模型的这个方面。字符串
对于表单,您只需引用customer_services中的service字段,然后您将获得一个已创建的名称和架构组合列表,并将两者都显示出来。
型
根据您创建的服务名称和体系结构,完成后应类似于此。
u7up0aaq2#
只需使用模型的
__str__
魔术方法覆盖字符串表示,在本例中为Service
:字符串