【问题标题】:Django retrieve key of group ChoiceFieldDjango 检索组 ChoiceField 的键
【发布时间】:2019-10-16 15:40:28
【问题描述】:

检索组 ChoiceField 的键

MEDIA_CHOICES = (
('Audio', (
        ('vinyl', 'Vinyl'),
        ('cd', 'CD'),
    )
),
('Video', (
        ('vhs', 'VHS Tape'),
        ('dvd', 'DVD'),
    )
),
('unknown', 'Unknown'),

)

class ressource(models.Model):
....

media = models.CharField(max_length=50, choices=MEDIA_CHOICES)

在现场媒体中,我有黑胶唱片或 cd 或 vhs 或 dvd...但是如何检索音频、视频、未知?

【问题讨论】:

  • 你的意思是检索?您想从数据库中获取(SELECT)数据吗?
  • 我想要一份报告:在我们的资源中,我们有 4 个音频(3 个 cd,1 个乙烯基)15 个视频(12 个 vhs,3dvd)和 10 个未知

标签: django python-2.7 django-models


【解决方案1】:

你应该向我们证明更多细节。首先选择应该是iterable 对象(例如tuple,在你的情况下),但你的tuple 在你的情况下非常复杂(Django 无法处理这个)。你应该传递这样的东西作为选择。

选择示例(这是很好的元组代码)

CHOICES = (
    ('key', 'value') # key will be inserted in database (and validation purposes), and  value is just for representation purposes.
)
LANGUAGES = (
    ('python', 'Python'),
    ('js', 'JS'),
    ('ruby', 'Ruby'),
)

想象一下,您正试图从数据库中检索对象。

class ressource(models.Model):
    ''' This is your model '''
    media = models.CharField(max_length=50, choices=MEDIA_CHOICES)

res = ressource.objects.get(pk=1) # retrieve data from database.
print(res.media) # returns string object. you will read actual value of media field
''' But if you want to read all available choices on this field, Django provide as _meta api. You can use it very nice way '''
res = ressource.objects.get(pk=1)
fields = res._meta.fields # This will return tuple-like object.
for field in fields:
    if field.name == 'media':
        # you want to find "media" field
        print(field.choices) # This will return all available choices on your media field

希望对您有所帮助。祝你好运。

【讨论】:

  • 谢谢,但我想要按类别选择(乙烯基和 cd -> 类别音频、vhs 和 dvd -> 类别视频...)我还想按类别计算资源(音频、视频... )
  • 不客气。 CHOICES 不是你应该在这种情况下使用的东西。你需要关系数据库。 ForeignKey 类将是您的理想选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 2011-12-26
  • 2021-10-18
  • 2011-04-10
  • 2011-08-20
  • 2014-07-11
  • 2013-01-10
相关资源
最近更新 更多