我在Django创建了一个客户数据库。每个客户可以有多个地址,客户记录指向其中一个地址作为帐单地址。这被设置为外键,每个地址都有一个指向拥有它的客户的外键。
当我们尝试创建新客户时会出现问题。新客户显然还没有任何地址,因此结算地址的下拉列表必须为空且不需要(或者更好,不存在)。它当然不应该显示或允许我选择其他客户的地址。
地址在客户管理页面上内嵌输入。
如何执行至少一个新客户创建的地址(或在编辑后至少以一个地址结束)?
我想要指定帐单邮寄地址,那么如何自动将帐单邮寄地址设置为与给定客户关联的第一个地址?如果地址被指示为帐单邮寄地址被删除,我还需要提出投诉。
如何才能在结算地址的下拉列表中显示当前客户的地址?我知道limit_choices_to
选项,但不知道如何引用当前对象,因为据我所知,我需要在Customer类中声明billing_address列时使用limit_choices_to
,self
未定义,因此我无法获取当前对象的主键。
这是我到目前为止的代码的简化版本:
from django.db import models
class Address(models.Model):
customer = models.ForeignKey("Customer")
street = models.CharField(max_length=128)
city = models.CharField(max_length=128)
def __unicode__(self):
return "%s, %s" % (self.street, self.city)
class Customer(models.Model):
last_name = models.CharField(blank=True, max_length=64)
first_name = models.CharField(blank=True, max_length=64)
billing_address = models.ForeignKey("Address", null=True, blank=True, related_name="+")
def __unicode__(self):
return "%s %s" % (self.first_name, self.last_name)
答案 0 :(得分:0)
创建一个方法,监听您的客户模型的pre_save signal,检查是否输入了一个地址,如果只输入了一个,则将其设置为帐单地址;如果没有输入地址,则引发异常。
要仅显示相关的帐单邮寄地址,请使用ModelChoiceField,这会自动为您填写条目。