Django -如何简化创建有许多外键的表的新行?



示例模型:

class GenderDecode(models.Model):
gender_code = models.IntegerField(primary_key= True)
gender_explain = models.CharField(max_length=100)
class AgeDecode(models.Model):
age_code = models.IntegerField(primary_key= True)
age_explain = models.CharField(max_length=100)
class User(models.Model):
name = models.CharField(max_length=100)
age_group = models.ForeignKey(AgeDecode, on_delete = models.CASCADE)
gender_group = models.ForeignKey(GenderDecode, on_delete = models.CASCADE)

GenderDecodeAgeDecode表的初始设置:

GenderDecode

gender_code    gender_explain
1              male
2             female

AgeDecode

age_code    age_explain
1           young
2            old

假设我想创建一个新用户- John Male Young。我必须这么做。

User(name = 'John', 
age_group = AgeDecode.objects.filter(gender_code=1).first(), 
gender_group = GenderDecode.objects.filter(age_code=1).first()
).save()

我想做这个

User(name = 'John', 
age_group = 1, 
gender_group = 1
).save()

但是我得到了这个错误

ValueError: Cannot assign "1": "User.gender_group" must be a "GenderDecode" instance.

好吧,如果上面的语法是必须的,有没有办法去简化我的新行代码?

可以这样使用外键字段的_id:

User(
name='John', 
age_group_id=1, 
gender_group_id=1
).save()

最新更新