这三个模型之间的关系是:用户,生日,标签?

时间:2019-04-01 09:50:14

标签: django django-models

我正在创建一个生日日历应用程序。它将具有以下模型: -Django的用户模型 -生日 -标签(即朋友,家人)

我不确定如何为Label类建模。用户应该具有创建新的Label对象的能力,然后可以在创建Birthday对象时使用它。 用户还应该能够根据标签过滤生日。

您如何在数据库中为这些关系建模?

from django.conf import settings
from django.db import models
from django.utils import timezone

class Birthday(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(max_length=25)
    day = models.DateField()

class Label(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    tag = models.CharField(max_length=25)

2 个答案:

答案 0 :(得分:1)

class Label(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    tag = models.CharField(max_length=25)



class Birthday(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(max_length=25)
    day = models.DateField()
    label = models.ForeignKey(Label, on_delete=models.CASCADE)

使用“标签”作为“生日外键”。这样您就知道哪个生日与哪个标签有关。

然后您可以根据这样的标签过滤掉生日。

Birthday.objects.filter(label__id=1)

答案 1 :(得分:0)

据我了解,您可以在生日模型中将Label添加为ManyToMany字段。这样,您可以将此标签分配给Birthday。一个生日可以有多个标签,一个标签可以有多个生日。所以会像这样:

class Birthday(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(max_length=25)
    day = models.DateField()
    labels = models.ManyToManyField(Label)

用法:

birthday = Birthday.objects.create(...)
label = Label.objects.create(...)
b.labels.add(label)
Birthday.objects.filter(labels=label)