0

この問題を理解しようとして、インターネットを検索して読みました。この問題に関するアドバイスをありがとうございます。

オブジェクトのリストを 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'
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が何らかの理由で ManyToMany 関係であることがわかります。インスタンス化でそれを渡すことはできません (関係を作成する前に、両端に保存されたインスタンスが必要なため)。最初のものをインスタンス化して保存しAd、次に関係を追加しますad.subcategory.add(*subcategory)

その関係が実際に ManyToMany であるべきかどうかについては、別の問題です (サブカテゴリが複数のカテゴリに属する​​ことができるとはどういう意味でしょうか?)。

于 2012-07-06T17:53:13.017 に答える