2012-07-06 75 views
0

我已经通过互联网搜索并阅读,试图找出这个问题。感谢您对此问题的任何建议。将列表添加到Django视图中的对象

我一直有问题添加对象列表到Django中的另一个对象。我有一个对象“类别”和对象“子类别”的名单,但是当我试图把它们放在一起作为一个整体“广告”,有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

安置自己的车型。我们怎么帮助,如果我们不甚至知道你的代码如何工作? – 2012-07-06 17:32:50

+1

尼克,编辑你的答案,并包括你的models.py – 2012-07-06 17:47:57

+0

代码抱歉是神秘。上面添加了模型。感谢您的支持。 – 2012-07-06 20:05:26

回答

1

使用我的水晶球,我可以告诉subcategory是由于某种原因,一个多对多的关系,你不能把它传递的实例(因为它需要保存的情况下,两端之前关系可以创建)。实例化和保存Ad第一,然后添加与ad.subcategory.add(*subcategory)

关系,这种关系是否实际上是一个多对多的一切是另一个问题(这一切意味着什么一个子类别可以属于多个类别? )。

+1

该死的,我在哪里可以得到那个水晶球? :) – 2012-07-06 17:56:49

2

我是你正在做或者为什么不积极的东西,只是把我的2美分:

如果你要做类别W /层次结构(除非有从位置不同的东西(除层次结构),也许你应该使用类似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给你

+0

感谢您详细说明使用django-mptt的方法。 – 2012-07-06 19:59:37