Skip to main content
 首页 » 编程设计

python之Django获取外键数据设置字段默认值

2025年05月04日29wuhuacong

我有两个具有各自形式的模型。一个有到另一个的外键链接,在这里我想设置一些字段默认数据。

class Lexicon(models.Model): 
 
    [...] 
 
    case_sensitive = models.BooleanField(default=True) 
    invariant = models.NullBooleanField(default=False) 
    diacritics = models.BooleanField(default=True) 
 
    [...] 
 
    class Meta: 
        verbose_name = "lexicon" 
        ordering = ["filename"] 
 
    def __str__(self): 
        return self.filename 
 
 
class Lexeme(models.Model): 
 
    lexicon = models.ForeignKey(Lexicon, on_delete=models.CASCADE) 
 
    case_sensitive = models.BooleanField(default=True) 
    diacritics = models.BooleanField(default=True) 
 
    [...] 
 
    class Meta: 
        verbose_name = "lexeme" 

我希望 Lexeme 模型字段“case_sensitive”和“diacritics”默认来自 Lexicon。我想表单可能是执行此操作的更好地方。

有什么想法吗?

请您参考如下方法:

据我了解,您只需将数据从 Lexicon 填充到 Lexeme 模型字段。您可以在 FormView 中覆盖 get_form_kwargs,如下所示

def get_form_kwargs(self): 
    lex_obj = Lexeme.objects.get(pk=self.kwargs['pk']) 
    kwargs = super().get_form_kwargs() 
    kwargs['initial']['case_sensitive'] = lex_obj.lexicon.case_sensitive 
    kwargs['initial']['diacritics'] = lex_obj.lexicon.diacritics 
    return kwargs 

这是你想要的吗?我没有测试过,但我在我的项目中使用过类似的东西。让我知道是否有效。