Есть ли способ добавить список в класс модели django?
Я начинающий 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
В Центре будет один менеджер, а потом много граждан. Что я должен сделать здесь? Должен ли я добавить список граждан? Возможно ли это?
Я думаю, что чтение этого может помочь.
Но, по сути, вы хотите реализовать так называемое отношение "один (центр) - много (граждан)". Короче говоря, ваш гражданин может иметь Foreign Key, называемый centre_id
, который будет идентификатором центра, к которому он принадлежит. Затем вы можете использовать идентификатор центра для запроса списка граждан, или если вы хотите получить центр и присоединить к нему список его граждан, то вы можете сделать то, что называется join
Вы можете реализовать это двумя различными способами:
<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, ...