class Property(models.Model):
property_name = models.CharField(max_length=100)
unit_name = models.CharField(max_length=100)
class Tenant(models.Model):
tenant_name = models.CharField(max_length=100)
rent_unit = models.ForeignKey(Property, on_delete=models.SET_NULL)
class Payment(models.Model):
payment_name = models.ForeignKey(Tenant, on_delete=models.SET_NULL)
payment_property = models.ForeignKey(Property, on_delete=models.SET_NULL, limit_choices_to={
'pk__in': Property.objects.filter(unit_name=models.OuterRef('payment_name__rent_unit__unit_name'))
})
我尝试使用Django的ForeignKey.limit_choices_to属性和子查询来限制Payment模型中的payment_property字段的选择,该字段基于Tenant模型中所选的rent_unit。但是当我尝试执行makemigrations. ValueError: This queryset contains a reference to an outer query and may only be used in a subquery.
时,我得到了这个错误
当我创建一个新的Payment对象并选择一个Tenant对象时,我希望得到一个payment_property的单一选择,payment_property字段的可用选择应限于与所选Tenant对象的rent_unit具有相同unit_name的Property对象。
1条答案
按热度按时间pgky5nke1#
如果你想要链接外键,那么你可以使用第三方包django-smart-selects。要查看文档click here
但如果你想自己做,也可以自己做,先创建一个API,把payment_name的值作为参数发送,api会返回给你payment_property的过滤选项,在选择payment_name之前,payment_property选项为空,选择payment_name之后,用javascript调用api,获取payment_property的过滤选项,并将选项添加到选择选项中。