django 如何设置ForeignKey的默认值

bzzcjhmw  于 2022-11-18  发布在  Go
关注(0)|答案(2)|浏览(159)

我有这个领域

graduation_year = m.ForeignKey('GraduationYear', on_delete=m.SET_NULL, null=False,blank=False)

GraduationYear类是。

class GraduationYear(BaseModel):
    label = m.CharField(max_length=255)
    year = m.CharField(max_length=255,unique=True)
    def __str__(self):
        return self.label

现在,我想将year=2022的GraduationYear对象设置为graduation_year的默认值
所以,我猜我应该把sql嵌入到下面的位置。

graduation_year = m.ForeignKey('GraduationYear', on_delete=m.SET_NULL, null=False,blank=False,default='select GraduationYear where year=2022')

这可能吗?

wpx232ag

wpx232ag1#

如果您的表仅使用ORM进行管理,则一个好的方法是覆盖模型上的save方法以设置它(如果未提供):

class GraduationYear(BaseModel):
    label = m.CharField(max_length=255)
    year = m.CharField(max_length=255,unique=True)
    def __str__(self):
        return self.label

class GraduationDetails(BaseModel):
    graduation_year = m.ForeignKey('GraduationYear', on_delete=m.SET_NULL, null=False, blank=False)

    def save(self, *args, **kwargs):
        if not self.graduation_year:
            self.graudation_year, _ = GraduationYear.objects.get_or_create(year=2022)
        return super().save(*args, **kwargs)
4ngedf3f

4ngedf3f2#

default=lambda: GraduationYear.objects.get_or_create(year=2022)[0]

相关问题