Django类中的动态字段值

时间:2016-01-02 13:27:20

标签: python django

我想使用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)

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

任何帮助都将不胜感激。

1 个答案:

答案 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