我在Django项目中创建了两个模型:Category
和Shop
。每个店铺可能只有一个类别。如果我没有定义店铺的类别,我希望它在模板的Without category
部分。我如何设置默认值?
我的模特:
class Category(models.Model):
name = models.CharField(max_length=100)
position = models.IntegerField(unique=True)
def __str__(self):
return f'{self.name}'
class DemoShop(models.Model):
title = models.CharField(max_length=100)
category = models.ForeignKey(Category, on_delete=models.CASCADE,
related_name='Cat')
def __str__(self):
return f"{self.title}"
当我写道:
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='Cat', default='Without category')
它在我的数据库中没有效果,并且它不会显示在我的模板的Without category
部分。如果我没有把一个商店放在某个类别中,我希望它显示在页面的Without category
中,如:
Products:
-lorem;
-testshop;
Watch:
-keram;
-pollop;
Without category:
(All shop what I haven't define a category in DB)
1条答案
按热度按时间vvppvyoh1#
ForeignKey
模型字段默认值是它引用的模型示例的主键(除非您在ForeignKey上设置to_field
以指向引用模型的其他字段)。https://docs.djangoproject.com/en/4.1/ref/models/fields/#django.db.models.Field.default如果你想把
DemoShop
的默认类别设置为“Without value”,你可以创建一个classmethod,如果存在的话,它会创建/返回名称为“Without category”的Category
(我随意地为get_or_create
方法选择了position=5
参数值):然后,您可以使用定义的classmethod来获取名称为“Without category”的虚拟类别(假设
Category
和DemoShop
模型定义在同一个models.py文件中:如果由于某种原因,您确实不能/不想将名称为“Without category”的伪类别插入到数据库中,您可以在
DemoShop
模型上设置category字段,使其允许空输入并可为空,然后定义一个自定义方法作为相关类别名称的getter:然后在模板中使用此方法获取DemoShop示例的类别名称。