0

我已经搜索并通过互联网阅读试图找出这个问题。感谢您对此问题的任何建议。

我在 Django 中将对象列表添加到另一个对象时遇到问题。我有一个对象'category'和一个对象列表'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'
4

2 回答 2

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 为你提供的所有花哨的层次结构构建工具

于 2012-07-06T18:08:01.563 回答
1

使用我的水晶球,我可以看出subcategory出于某种原因这是一个多对多关系,并且您不能在实例化时将其传递(因为在创建关系之前它需要在两端保存一个实例)。首先实例化并保存Ad,然后添加关系ad.subcategory.add(*subcategory)

至于这种关系实际上是否应该是 ManyToMany 是另一个问题(子类别能够属于多个类别意味着什么?)。

于 2012-07-06T17:53:13.017 回答