【问题标题】:Django 2 Reference multiple users into one ModelDjango 2 将多个用户引用到一个模型中
【发布时间】:2019-06-25 17:18:33
【问题描述】:

我正在使用 Python(3.7) 和 Django(2) 开发一个项目,其中我有多个使用 User 模型的模型。我有一个演出模型,一个演出可以由一个用户创建,另一个用户用户可以购买这个演出,所以我想建立一个模型来存储我想要包含Gig Modeluser的购买信息在模型中创建了Gigseller 和购买演出的userbuyer。我怎样才能创建这样的模型?

这是我的Gig 模特:

class Gig(models.Model):
    CATEGORY_CHOICES = (
        ('GD', 'Graphic & Design'),
        ('DM', 'Digital Marketing'),
        ('WT', 'Writing & Translation'),
        ('VA', 'Video & Animation'),
        ('MA', 'Music & Audio'),
        ('PT', 'Programming & Tech'),
        ('FL', 'Fun & Lifestyle'),
    )

    title = models.CharField(max_length=500)
    category = models.CharField(max_length=255, choices=CATEGORY_CHOICES)
    description = models.CharField(max_length=1000)
    price = models.IntegerField(blank=False)
    photo = models.FileField(upload_to='gigs')
    status = models.BooleanField(default=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title

在这里,我想要实现的目标是:

class Order(models.Model):
    gig = models.ForeignKey(Gig, on_delete=models.CASCADE)
    seller = "I want to add the gig creator here"
    buyer = "I want to add thee gig buyer here"

【问题讨论】:

    标签: python django python-3.x django-models django-2.0


    【解决方案1】:

    你可以这样做:

    class Order(models.Model):
        gig = models.ForeignKey(Gig, on_delete=models.CASCADE)
        seller = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sold_orders')
        buyer = models.ForeignKey(User, on_delete=models.CASCADE, related_name='bought_orders')
    

    附:请注意,最好在 ForeightKey 字段上使用字符串模型表示,以避免可能的循环导入问题。 喜欢:

    gig = models.ForeignKey('Gig', on_delete=models.CASCADE)
    

    【讨论】:

      【解决方案2】:

      你为什么不这样使用ForeignKey

      class Order(models.Model):
          gig = models.ForeignKey(Gig, on_delete=models.CASCADE)
          seller = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="selling")
          buyer = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="buying")
      

      请确保每个 FK 到 User 模型都有不同的related_names,否则它们会发生冲突。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-03
        • 1970-01-01
        • 2011-09-19
        • 1970-01-01
        • 2015-09-30
        • 2012-08-05
        • 2023-03-19
        • 2018-07-29
        相关资源
        最近更新 更多