Вы не можете настроить поле «члены» автоматически.
Я бы порекомендовал использовать связь through
, так что вы сможете добавить дополнительное поле к отношениям между пользователем (пользователем) и клубом. например is_president=True
. (Смотрите пример DOCS ManyToMany.through)
# models.py
from django.db import models
from django.contrib.auth import get_user_model
class Club(models.Model):
name = models.CharField(max_length=30)
description = models.TextField(max_length=320)
members = models.ManyToManyField(through="Membership", related_name='clubs')
class Member(models.Model):
user = models.OneToOne(get_user_model())
class Membership(models.Model):
member = models.ForeignKey(Member)
club = models.ForeignKey(Club)
date_joined = models.DateField()
is_president = models.BooleanField(default=False)
Однако в текущей настройке модели вы можете перегрузить Model.save()
, который не рекомендуется, или использовать сборку Джанго в post-save signal который предпочитаемый.
1, Создание метода (или функции), которая будет проверять, если «президент» является «членом» Клуба
# models.py
def check_president_as_member(sender, instance, **kwargs):
#check if instance.president is in instance.members.all()
#add president to members if necessary
return True
2 Регистрация метод с пост-сэкономить на модели клуба.
# models.py
from django.db import models
models.signals.post_save.connect(check_president_as_member, sender=Club, dispatch_uid="check_president_as_member_post_save", weak=False)
Вы используете IntegerField для типа поля. Так должно ли целое число ссылаться на идентификатор конкретного пользователя, который является президентом? – Elliot
Как я упоминал в комментарии перед объявлением поля, что '0' для участника и' 1' для президента. Это означает, что для президента это значение будет установлено на '1'. Вы также можете взять булевский столбец с именем поля, например 'is_president'. – anuragal
Gotcha. Один последний вопрос, не будет ли member_type полем под моделью участника, а не с клубом? Потому что должен быть тип члена для каждого члена, правильно? – Elliot