gpt4 book ai didi

python - 根据字段值更改 Django 模型中的选择

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:47 34 4
gpt4 key购买 nike

例如,如果我有一个类摘要,

类摘要的每个实例,可以是一个主题:

    subjects = (
('english', 'אנגלית'),
('bible', 'תנ"ך'),
('history', 'היסטוריה'),
('civics', 'אזרחות'),
('language', 'לשון'),
('literature', 'ספרות'),
)


class Summary(models.Model):
...
subject = models.CharField(max_length=20, choices=subjects)
...

现在我决定要为每个主题硬编码一些主题,所以如果 Summary.subject = "literature" 我想添加一个字段

subtopic = models.CharField(choices=literature_subtopics)

并使选择等于:

literature_subtopics = (
('poems', 'שירה'),
('short_stories', 'סיפורים קצרים'),
('plays', 'מחזות'),
('novels', 'נובלות'),
)

如果主题是英语,则 english_subtopics 将用于选项字段。

我想对所有这些部门进行硬编码,因为它们不会每隔几年更改一次(如果有的话),将它们存储在数据库中毫无意义。

我需要以某种方式为每个主题设置所有这些划分,并让 Django 适本地为子主题设置选择字段。

我可以覆盖 init 方法来以某种方式完成这个吗?我听说这是个坏主意,会破坏一切。

最佳答案

即使数据不经常变化,将数据放在数据库中,将 Python 放在 Python 文件中似乎是最自然的。您提出的解决方案似乎是在与 Django 想要做事的方式作斗争。

如何看待数据库解决方案?

class Subject(models.Model):
parent = models.ForeignKey("self")
name = models.CharField(max_length=100)
hebrew_name = models.CharField(max_length=100)

class Summary(models.Model):
...
subject = models.ForeignKey("Subject")
...

class SubjectForm(forms.Form):
subject = forms.ModelChoiceField(queryset=Subject.objects.none())
...

def __init__(self, *args, **kwargs): # see http://stackoverflow.com/a/4880869/1477364
sub = kwargs.pop('parent_subject')
super(SubjectForm, self).__init__(*args, **kwargs)
parent_subject = Subject.objects.get(name=sub)
sub_subjects = Subject.objects.filter(parent=parent_subject)
self.fields['subject'].queryset = forms.ModelChoiceField(queryset=sub_subjects)

请注意,代码暗示总会有一个父 Subject 传递给 SubjectForm。 (您需要一个“根”主题。)

关于python - 根据字段值更改 Django 模型中的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31441566/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com