基于另一个模型的 Django 模型选择

Posted

技术标签:

【中文标题】基于另一个模型的 Django 模型选择【英文标题】:Django Model choices based off another model 【发布时间】:2018-04-15 15:32:13 【问题描述】:

对不起,如果这令人困惑,我对 Django 还是有点陌生​​。所以基本上我有两个模型,我希望从一个模型中选择一个,以便从另一个模型中获得所有选择。所以基本上:

class Show(models.Model):

venue = models.CharField(max_length=100, choices = VENUE NAME)

class Venues(models.Model):
Name = models.CharField(max_length=100)

基本上我希望场地有一个输入到该模型中的场地名称列表。这可能吗?

【问题讨论】:

使用外键? docs.djangoproject.com/en/1.11/ref/models/fields/… Venue__str__() 方法应该返回 self.name 【参考方案1】:

在你的情况下,你应该使用many-to-one ForeignKey

它使您可以从您的Show 对象访问Venues 对象,并且很容易将其添加到您的模型中。

class Show(models.Model):
    venue = models.ForeignKey('Venues', on_delete=models.CASCADE)

class Venues(models.Model):
    name = models.CharField(max_length=100)

要获得您的选择,您可以使用:

Venues.objects.all()

然后您唯一需要的就是将对象或 ID 添加到您的 Show 对象并保存。

选择也很好,但在这种情况下并非如此。例如,当您需要一些 const 并为用户提供如下选择时:

class Show(models.Model):
    VENUES_CHOICES = (
        (RESTAURANT, 'restaurant'),
        (PUB, 'pub'),
    )

    venues = models.IntegerField(choices=VENUES_CHOICES, default=RESTAURANT)

在我看来,在订单状态中使用它很棒。

【讨论】:

嘿!这可行,但是在我的 Show admin 页面上,我得到了场地列表,但他们只说“场地对象”而不是名称。有什么想法吗? 是的,这可行,但不是 OP 所要求的。本质上,他想使用场地表中的查询集值作为节目表中的一个选项。 在 ModelForm 类中使用 ModelChoiceField,如下所示:myFormField = ModelChoiceField(queryset=MyChoices.objects.all())【参考方案2】:

在场地模型中添加这样的 str def 就可以了

def __str__ (self):
    return self.name

【讨论】:

以上是关于基于另一个模型的 Django 模型选择的主要内容,如果未能解决你的问题,请参考以下文章

基于外键过滤数据 - Django

如何使用 html 表单更新基于 django 模型的表单(具有选择选项)记录

根据用户输入从 django 模型中选择对象

Django Jquery:基于选择,显示更多选择选项

django cms 插件上的动态模型选择字段

Django - 动态模型参数值