Django的模型关系

Django的模型关系

问题描述:



我有3个Django的模型类:

1.客户 - 包含多种计费和送货地址

2.地址 - 可结算或送货地址

3.订单 - 包含引用1位客户,1位帐单地址和1位客户选择的送货地址。

Django的模型关系

如何创建在管理页面中呈现的订单类,以便用户可以选择使用哪个送货地址?

Address类有一个名为名称,以便用户可以指定短名称,如“HQ”或“纽约分行”属性。我希望用户能够使用短名称从下拉列表中选择送货地址。我是一个缓慢的菜鸟。

UPDATE

CODE

订货型号:

class Order(models.Model): 
    customer = models.ForeignKey(Customer)   
    shipping_address = models.CharField(max_length=80)// Should be a drop list based on the customer above 
    ... 

客户模式:

class Customer(models.Model) 
    name = models.CharField(max_length=80)  
    username = models.CharField(max_length=12) 
    password = models.CharField(max_length=12) 
    ... 

    def __unicode__(self): 
     return self.name 

地址型号:

class Address(models.Model): 
    name = models.CharField(max_length=80, help_text='Easy to remember name like "HQ"')  
    customer = models.ForeignKey(Customer) 
    address_type = models.CharField(max_length=12, choices=ADDRESS_TYPES,) 
    street_1 = models.CharField(max_length=100) 
    street_2 = models.CharField(max_length=100) 
    ... 

    def __unicode__(self): 
     return self.name 

感谢高级!

the docs

模型的__unicode__方法将被调用来生成领域的选择使用对象的字符串表示...

所以,override Address.__unicode__()

+0

从理论上说,我想要做这样的事情在我的Order类: '地址= models.OneToManyField(customer.Address.all())。有任何想法吗? –

+0

不,你不希望这样做。你想要一个多对多的关系,否则你不能在多个订单中使用一个地址。 –

试着看一下这个问题:

How to work with dynamic data in Admin Panel?

django ForeignKey model filter in admin-area?

我认为他们是非常相似你的问题。您只需要在Address模型的admin.py中设置选项。

+0

你的建议可能是该问题的解决方案。但是,我遇到了问题,因为Order对象与Address对象没有直接关系。我需要该表单才能显示Order类中客户字段引用的客户对象的地址名称。 –

+0

如果你想用standart Django工具做这样的事情,你必须将字段改为ManyToMany/ForeignKey。如果你想使用下拉自动选择菜单 - 请看django-ajax-select。在这个下拉菜单中将会有自定义信息的方式......这只是自动选择的小部件,它为我工作。 – Dracontis