我想使用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)
我希望班级中的类别字段可以使用多个选项,可能是两个或更多。
任何帮助都将不胜感激。
答案 0 :(得分:0)
如果你想让一个python模型有多个类别,那么你需要django ManyToManyField
。基本上一个模型对象可以有多个选择,一个选项也可以属于多个模型对象:
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
以避免创建重复的类别。
不相关的东西,你不应该在模型名称中使用较低的拳头,而在字段名称中使用较高的第一个,这实际上是BAD命名约定,并且可能会使阅读代码的其他人感到困惑。
示例:
# 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。