基于另一个模型的 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 模型选择的主要内容,如果未能解决你的问题,请参考以下文章