【问题标题】:django: set model fields as choices in models.pydjango:将模型字段设置为 models.py 中的选项
【发布时间】:2015-10-10 19:18:58
【问题描述】:

是否可以从另一个表中设置字段的选择? 例如

class Initial_Exam(models.Model):
    Question_category = models.CharField(max_length=20, choices = Job.Job_Position)

class Job(models.Model):
    Job_Position = models.CharField(max_length=30, null=True)

类似的东西

【问题讨论】:

  • 这不是 ForeignKey 的用途吗?
  • 是的,这是有道理的,但是我将如何在管理员中将 Job_Position 显示为选项,而不仅仅是数字,如果有链接,我可以有链接吗?
  • 您已经过度扭曲了您的实现。您应该有一个指向Job 的外键,并为Job 模型编写__unicode__ 函数以返回Job_Postion。或者,如果 Job_Position 是一组有限的字符串,则在 Initial_Exam 本身内定义选项。上帝,PEP 死了!
  • 谢谢我知道了。我真的对 python 感到困惑,它与我尝试过的任何其他语言都不一样
  • 我在这里看不到任何特定于 Python 的内容,所以不确定是什么让您感到困惑。

标签: python django python-2.7 django-models


【解决方案1】:

要关闭它: 如上所述,不是扭曲我的实现,而是为Initial_Exam 设置外键并在Job 上使用__unicode__ 完成了这项工作

应该是这样的:

class Job(models.Model): Job_Position = models.CharField(max_length=30, null=True) def __unicode__(self): return self.Job_Requirements

这会将Job_Position 显示为管理面板中的选项

感谢社区,真的很感激

【讨论】:

    【解决方案2】:

    您绝对可以通过 ForeignKey 关系绑定到另一个模型,但是如果您的选择数量较少,您可能需要考虑使用以下模式用于较小的选择列表(我将它用于相当恒定的选择列表,少于10):

    class FrequencyType(models.Model):
    
        FREQ_MONTHLY = 1
        FREQ_QUARTERLY = 3
        FREQ_YEARLY = 12
    
        FREQ_CHOICES = (
            (FREQ_MONTHLY, 'Monthly'),
            (FREQ_QUARTERLY, 'Quarterly'),
            (FREQ_YEARLY, 'Yearly'),
        )
    
        frequency = models.SmallIntegerField(default=FREQ_MONTHLY, choices=FREQ_CHOICES)
    

    或者,另一个例子:

    class YesNoModel(models.Model):
        NO = 0
        YES = 1
    
        YESNO_CHOICES = (
            (NO, 'No'),
            (YES, 'Yes'),
        )
    
        weight = models.IntegerField(default=NO, choices=YESNO_CHOICES)
    

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2017-07-08
      • 2020-10-09
      • 2010-10-18
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多