Django 2将多个用户引用到一个模型中

时间:2019-02-01 06:45:33

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

我正在使用Python(3.7)和Django(2)开发一个项目,其中有多个使用User模型的模型。我有一个演出模型,一个用户可以创建一个演出,另一个用户可以购买该演出,因此我想构建一个模型来存储要包含Gig Model和{ {1}}已将user创建为Gig,而seller正在模型中购买了演出的user。如何创建这样的模型?

这里是我的buyer模型:

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

2 个答案:

答案 0 :(得分:1)

为什么不像这样使用ForeignKey

tableData

对于每个FK到用户模型,请确保使用不同的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") ,否则它们会发生冲突。

答案 1 :(得分: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')

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

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