在Django视图中向列表添加列表

时间:2012-07-06 17:29:14

标签: python django views

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

我在向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'

2 个答案:

答案 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是另一个问题(子类别能够属于多个类别意味着什么?)。