您不能自动配置“会员”字段。
我建议您使用ManyToMany
关系与through
选项,因此您可以在会员(用户)和俱乐部之间的关系中添加额外的字段。例如is_president=True
。 (见文档例如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这是首选使用Django的构建。
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。那么整数是否应该指明总裁是特定用户的ID? – Elliot
正如我在字段声明之前的评论中提到的那样,成员为'0',总裁为'1'。这对总统来说意味着这个值将被设置为'1'。您可以使用布尔列以及字段名称,如'is_president'。 – anuragal
Gotcha。最后一个问题,member_type不是会员模式下的字段,而不是Club?因为每个成员都需要成员类型,请更正? – Elliot