我有2个表“ Client”和“ Location”。
class Client(models.Model):
name = models.CharField(max_length=50)
class Location(models.Model):
name = models.CharField(max_length=50)
一个客户端可以位于多个位置,而一个位置可以具有多个客户端。
我创建了第三个表来保持这种关系:
class Client_Location(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE)
location = models.ForeignKey(Location, on_delete=models.CASCADE)
我创建了一个表单来测试是否可以使下拉列表动态化,因此,如果我要选择一个客户端,则只会显示与该客户端链接的任何位置。
class ClientLocationForm(forms.ModelForm):
class Meta:
model = Client_Location
fields = '__all__'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['location'].queryset = Location.objects.none()
到目前为止,我只能将位置字段设为空白。不知道下一步该怎么做,因为我所看到的例子并不完全像我的。
答案 0 :(得分:0)
只需对代码进行最少的更改,就可以为新的显式Client_Location
关系将现有的through
模型添加为ManyToMany
模型。为此,请将以下字段添加到您的Client
模型中:
locations = models.ManyToManyField('Location', through='Client_Location', related_name='clients')
如果需要完全动态的更新,则需要编写一个视图以提供指定客户端(client.locations.all()
)的位置列表,然后在页面上显示它们。