我搜索并通过互联网阅读试图找出这个问题。感谢您就此问题提出任何建议。
我在向Django中的另一个对象添加对象列表时遇到了问题。我有一个对象'类别' 和一个对象列表' subcategory' ,但当我尝试将它们放在一起时包' ad' ,有一个TypeError: 'subcategory' is an invalid keyword argument for this function
。
以下是观点:
def create_in_category(request, slug):
category = get_object_or_404(Category, slug=slug)
subcategory = SubCategory.objects.all()
ad = Ad.objects.create(category=category, subcategory=subcategory, user=request.user,
expires_on=datetime.datetime.now(), active=False)
ad.save()
我缺少什么才能将所有这些元素组合在一起?非常感谢您分享您的知识。
编辑:添加模型。
class Category(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField()
def __unicode__(self):
return self.name + u' Category'
class SubCategory(models.Model):
name = models.CharField(max_length=50, unique=True)
category = models.ManyToManyField(Category)
def __unicode__(self):
return self.name + u' SubCategory'
答案 0 :(得分:2)
我不是肯定你在做什么或为什么,而只是把我的2美分放在:
如果你打算用层次结构做类别(除非有不同的东西(除了层次结构中的位置),你可能应该使用像https://github.com/django-mptt/django-mptt/这样的东西
class Category(MPTTModel) :
"""initial Category model"""
title = models.CharField(
verbose_name = _(u'Title'),
help_text = _(u'This category.'),
max_length = 255
)
slug = models.SlugField(
verbose_name = _(u'Slug'),
help_text = _(u'Unique identifier for this category.'),
max_length = 255,
unique = True
)
parent = models.ForeignKey(
'self',
null = True,
blank = True,
default = None,
verbose_name = _(u'Parent Category')
)
class MPTTMeta:
order_insertion_by = ['title', ]
class Meta:
verbose_name = _(u'Category')
verbose_name_plural = _(u'Categories')
def __unicode__(self):
return '%s' % (self.title,)
然后您可以使用MPTT为您提供的所有精美层次构建工具
答案 1 :(得分:1)
使用我的水晶球,我可以告诉subcategory
由于某种原因是一个ManyToMany关系,你不能在实例化时传递它(因为在关系可以之前需要在两端都保存一个实例)创建)。首先实例化并保存Ad
,然后添加与ad.subcategory.add(*subcategory)
关于这种关系实际上是否应该是ManyToMany是另一个问题(子类别能够属于多个类别意味着什么?)。