我是django的初学者,正试图从头开始制作一个项目。我的型号是:
class Citizen(models.Model):
name = models.CharField(max_length=64, unique=False)
citizen_id = models.CharField(max_length=10, unique=True)
def __str__(self):
return '{} by {}'.format(self.name, self.citizen_id)
class Manager(models.Model):
name = models.CharField(max_length=64, unique=False)
manager_id = models.CharField(max_length=10, unique=True)
def __str__(self):
return '{} by {}'.format(self.name, self.manager_id)
class Message(models.Model):
sender = models.ForeignKey(Citizen, Manager, on_delete=models.CASCADE, related_name='sender')
receiver = models.ForeignKey(Citizen, Manager, on_delete=models.CASCADE, related_name='receiver')
message = models.CharField(max_length=1200)
timestamp = models.DateTimeField(auto_now_add=True)
is_read = models.BooleanField(default=False)
def __str__(self):
return self.message
class Meta:
ordering = ('timestamp',)
class Centre(models.Model):
pass
在中心,会有一个经理,然后会有很多市民。我在这里该怎么办?我应该加一份公民名单吗?这可能吗?
我认为阅读这篇文章可能会有所帮助。
但从本质上讲,你想要实现所谓的一对多(中心((公民(关系。简而言之,你的公民可以有一个名为centre_id
的外键,这将是他们所属中心的id。然后你可以使用中心的id查询公民列表,或者如果你想获取中心并将其公民列表附加到它上,那么你可以做一个称为加入的事情
您可以通过两种不同的方式实现这一点:
- 在您的公民模型上设置ForeignKey字段。这是一种多对一的关系,意味着一个中心可以有许多公民。您可以在Citizen对象上设置Centre,该中心可以访问为
citizen.centre
,在verse中可以访问为centre.citizen_set.all()
class Citizen(models.Model):
...
centre = models.ForeignKey(Centre, null=True, blank=True, on_delete=models.SET_NULL)
- 如果每个中心只有一个经理,则可以使用OneToOneField来确保没有多个经理。它的工作方式与多对一关系不同,因为它是完全双向的,例如
manager.centre
和centre.manager
class Manager(models.Model):
...
centre = models.OneToOneField(Centre, ...