代码之家  ›  专栏  ›  技术社区  ›  juju

如何使用模型关系将我的预订单模型与管理员中的客户模型关联起来,而不必每次都创建新对象

  •  0
  • juju  · 技术社区  · 7 年前

    ManyToMany 关系用于管理更改页,而不是允许我将多个客户与一个预订单关联,当我尝试将客户与预订单模型的实例关联时,它似乎创建了一个新对象,而不是更新当前的预订单实例以包含要与之关联的新客户。我想要这样的东西:

    ( 客户:John,id=3 预订单:NewItem,id=1 客户:Kim,id=5 )也与( 预订单:NewItem,id=1 NewItem,其中id=1 ,如果我选择 预订单:NewItem,id=1 从一张桌子上可以看出约翰和金已经预定了这个项目

    我基本上想显示一个列表,显示所有已经预定了特定产品的客户。相反,至少在 field,当我单击add next Many字段显示时,它会提示我创建一个新的预订单以与该客户关联,而不是选择一个已经存在的预订单。这会导致每个客户都有相同的关联预订单名称,但这些预订单在db表上的pk不同。 我有一个客户和预订单模型:

    class Preorder(models.Model):
        product = models.CharField(max_length=100, default='')
        price = models.DecimalField(max_digits=12, decimal_places=2, default=None)
        quantity = models.IntegerField(default=1, )
    
        def __str__(self):
            return self.product
    
    
    class Customer(models.Model):
        preorders = models.ManyToManyField(Preorder, blank=True, default=None)
        name = models.CharField(max_length=100, default='')
        email = models.EmailField(max_length=200, default='')
        credit = models.DecimalField(max_digits=12, decimal_places=2, default=None, null=True, blank=True, verbose_name='Store Credit')
    
        def __str__(self):
            return self.name
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   user9245558 user9245558    7 年前

    你有很多方法可以做到这一点,但感觉你的许多领域都走错了方向:

    class Preorder(models.Model):
        product = models.CharField(max_length=100, default='')
        price = models.DecimalField(max_digits=12, decimal_places=2, default=None)
        quantity = models.IntegerField(default=1, )
        customer = models.ManyToManyField(Customer, blank=True, default=None)
    
        def __str__(self):
            return self.product
    

    这样,您就有一个预订单和两个客户(John和Kim)-所以您不会复制预订单对象或用户对象!

    views.py :

    def preorders(request, product):
    
        context = {}
    
        preorders = Preorder.object.filter(product=product)
    
        return ...
    

    urls.py 像这样的:

    from django.conf.urls import url
    
    urlpatterns = [
        ...
        url(r'^preorders/(?P<product>\d+)/$', views.preorders, name='customer_preorders_by_product')),
        ...
    ]
    

    以及你的模板:

    {% for preorder in preorders %}
    <ul>
        preorder.product
        <li>{% for customer in preorder.customer.all %}{{ customer }}{% endfor %}</li>
    </ul>
    {% endfor %}
    

    希望有帮助?

    推荐文章