如何在初始化时从模型中的同一模型调用静态函数?DJANGO-PYTHON



长话短说,我有一个汽车模型和一个CarVersion模型,我希望用户能够通过html选择字段从数据库中保存的可用汽车版本中进行选择。

我无法理解如何从CarVersion模型动态生成选项字段。我有这个功能,但我不能在汽车模型内部调用它。

这是我迄今为止的代码:

class Car(models.Model):
choices = get_choices()
name = models.CharField(max_length=50, unique=True)
version = models.ForeignKey(CarVersion, choices=get_choices(), on_delete=models.RESTRICT)

@staticmethod
def get_choices():
options = CarVersion.objects.all().values_list("pk", "name")
try:
if not options:
return [(0, "No versions in database. Call your administrator.")]
except ProgrammingError:
return [(0, "No versions in database. Call your administrator.")]
return [(1, "Test")]

我想调用中的函数get_choices

version = models.ForeignKey(CarVersion, choices=get_choices(), on_delete=models.RESTRICT)但当函数被声明给模型时,我不知道该怎么做。如果我在模型之外定义它,它是有效的,但肯定有一种更好的方法,而不是用一堆特定于模型的函数来扰乱我的models.py文件。

第页。S.get_choices还没有完成,但只要我能打电话给它,我就会处理它。

出于几个原因,我建议不要这样做。模型字段上的choices参数用于验证可能添加到数据库中的数据。

除此之外,当加载模块时,获取CarVersion对象的函数被称为。这是个坏主意。当您甚至还没有数据库连接时,您可能希望在某个地方导入模块。

由于您的目的是为用户生成HTML表单中的选项,因此实现这一点的正确方法是依赖Django表单的外键功能。ModelChoiceField应该已经满足了您的需求。

PS:事实上,当您从具有ForeignKey字段的Model创建ModelForm时,ModelChoiceField会自动实例化。请参阅ModelForm页面上的字段转换列表。

我要感谢达尼尔的贡献,因为如果没有他的贡献,我永远无法为我的问题提出正确的问题,那就是:

如何动态生成选项字段。

这个问题的答案可以在:如何创建动态Django选择字段

最新更新