【问题标题】:Dynamic field value in Django classDjango 类中的动态字段值
【发布时间】:2016-04-06 14:31:29
【问题描述】:

我想使用 PyCharm 在 Django 中为我的类创建一个动态字段值。

CATEGORY_CHOICES = (
    ('on','one'),
    ('tw','two'),
    ('th','three'),
    ('fo','four'),
    ('fi','five'),
)

class art(models.Model):
    Title=models.CharField(max_length=300)
    Desciption=models.TextField()
    Category=models.CharField(max_length=2, choices=CATEGORY_CHOICES)

我希望班级中的类别字段采用多个选项,可能是两个或更多。

任何帮助将不胜感激。

【问题讨论】:

  • 请告诉我们dynamic是什么意思?
  • 一个标题可能属于一个或多个选项,例如第一个标题属于类别选项中的一个和两个,第二个标题可能只属于类别选项中的三个,下一个标题可能属于一,二,三,四个类别选择谢谢

标签: python django


【解决方案1】:

如果你想让一个python模型有多个类别,那么你需要djangoManyToManyField。基本上一个模型对象可以有多个选择,一个选择也可以属于多个模型对象:

class Category(models.Model):
    category_name = models.CharField(max_length=10, unique=True)

class Art(models.Model):
    title = models.CharField(max_length=300)
    description = models.TextField()
    category = models.ManyToManyField('Category', blank=True)

请注意,我将unique=True 放入category_name 以避免创建重复的类别。

一些不相关的东西,你不应该在模型名称中使用小拳头,在字段名称中使用大拳头,这确实是错误的命名约定,可能会混淆阅读你代码的其他人。

例子:

# create your category in code or admin
one = Category.objects.create(category_name='one')
two = Category.objects.create(category_name='two')
three = Category.objects.create(category_name='three')

# create a new art obj
new_art = Art.objects.create(title='foo', description='bar')

# add category to Art obj
new_art.category.add(one)
new_art.category.add(two)

# category for new art obj
new_art_category = new_art.category.all()

# get only a list of category names
category_names = new_art_category.values_list('category_name', flat=True)

# create another Art obj
new_art2 = Art.objects.create(title="test", description="test")
# assign category to new_art2
new_art2.category.add(two)
new_art2.category.add(three)

Django doc 用于多对多和 python pep8 doc

【讨论】:

  • class Category是class art中的外键还是必须定义?
  • 对不起,我不明白你的问题,类 Category 不是外键,它是 ManyToManyField,正如我在我的代码中向你展示的那样,我还在答案末尾提供了链接。
  • 现在的问题是,如果我在 category_name 中使用 3 个类别,然后自动将这些类别全部归入艺术类中的类别,我不会那样做,我想从 category_name 中选择一些类别
  • 抱歉,我无法理解您最后的评论是什么意思。我刚刚编辑了我的答案以提供更多详细信息。希望对您有所帮助。
猜你喜欢
  • 2013-09-20
  • 2012-05-29
  • 2011-12-21
  • 2015-11-25
  • 2012-06-27
  • 2021-05-24
  • 2015-10-21
  • 2021-12-18
  • 1970-01-01
相关资源
最近更新 更多