[英]django ForeignKey with Choices - setting default value
我有一个会员资格 model,有三个选择。 我在成员资格 model 中设置了这些选项的默认值。 但是,我有一个用户 model 与成员资格 model 有 ForeignKey 关系,当我尝试设置 default='Personal' 时,我得到一个 ValueError。
ValueError:字段“id”需要一个数字,但得到“个人”。
模型.py
MEMBERSHIP_CHOICES = (
('Enterprise', 'enterprise'),
('Premium', 'premium'),
('Personal', 'personal'),
)
class Membership(models.Model):
slug = models.SlugField()
membership_type = models.CharField(
choices=MEMBERSHIP_CHOICES,
default='Personal',
max_length=30)
annual_monthly_price = models.DecimalField(max_digits=5, decimal_places=2)
monthly_monthly_price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.membership_type
class CustomUser(AbstractUser):
username = None
first_name = models.CharField(max_length=255, unique=False, verbose_name='first name')
last_name = models.CharField(max_length=255, unique=False, verbose_name='last name')
email = models.EmailField(max_length=255, unique=True)
user_team = models.ForeignKey('Team', on_delete=models.SET_NULL, null=True, blank=True, related_name='userteam')
team_leader = models.BooleanField(default=False)
team_member = models.BooleanField(default=False)
user_tasks = models.ManyToManyField('Task', through='UserTasks')
# user types
membership_type = models.ForeignKey(Membership, on_delete=models.SET_DEFAULT, default='Personal')
# Abstract User fields
active = models.BooleanField(default=True)
staff = models.BooleanField(default=False)
admin = models.BooleanField(default=False)
我试过清除迁移并删除数据库。 我让它工作的唯一方法是使用:
on_delete=models.SET_NULL, null=True
在 CustomUser 的 members_type model 字段内,但我希望用户在注册时默认为“个人”。
我认为您遇到的错误是因为您尚未在Membership
model 中定义主键。 因此 Django 正在为您执行此操作,并使用一个数字的AutoField
。
尝试更改您的会员资格 model 以将membership_type
类型作为主键,即
membership_type = models.CharField(
primary_key=True,
choices=MEMBERSHIP_CHOICES,
default='Personal',
max_length=30)
假设membership_type 是一个唯一字段,一种可能的方法是:
#models.py
class Membership(models.Model):
membership_type = models.CharField(
choices=MEMBERSHIP_CHOICES,
default='Personal',
unique=True,
max_length=30)
....
class CustomUser(AbstractUser):
....
membership_type = models.ForeignKey(Membership, on_delete=models.SET_DEFAULT, to_field='membership_type', default='Personal')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.