Я делаю базу данных клиентов в Джанго. У каждого клиента может быть несколько адресов, и запись клиента указывает на один из этих адресов как адрес для выставления счета. Он настроен как внешний ключ, и каждый адрес имеет внешний ключ, указывающий на клиента, которому он принадлежит.
Проблема возникает, когда мы пытаемся создать нового клиента. У нового клиента, очевидно, еще нет адресов, поэтому раскрывающийся список для адреса выставления счета должен быть пустым и не обязательным (или, лучше сказать, отсутствующим). Это, конечно, не должно показывать или позволять мне выбирать адреса других клиентов.
Адреса вводятся на странице администратора клиента.
Как я могу принудить по крайней мере один адрес, созданный с новым клиентом (или заканчивающийся по крайней мере одним адресом после редактирования)?
Я хочу указать платежный адрес, так как я могу автоматически установить адрес выставления счета на первый адрес, связанный с данным клиентом? Мне также нужно будет подать жалобы, если адрес, указанный как адрес для выставления счета, будет удален.
Как можно отобразить только адреса текущего клиента в раскрывающемся списке для адреса выставления счета? Я знаю опцию limit_choices_to
, но не знаю, как ссылаться на текущий объект, учитывая, что, насколько я могу судить, мне нужно использовать limit_choices_to
при объявлении столбца billing_address в классе Customer, где self
isn я не могу получить первичный ключ текущего объекта.
Вот упрощенная версия кода, который у меня есть:
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)