0

私の Web アプリでは、aCategoryと a の間に m2m 関係があります。User

class Category(models.Model):
    users = models.ManyToManyField(User,related_name='category_users')
    title = models.CharField(max_length=200)
    description = models.TextField()

ユーザーがカテゴリを作成しようとすると、私はこれを行います

category,created = Category.objects.get_or_create(title__iexact=category_title,defaults={'title':category_title,'description':category_title})

の編集ページをユーザーに提供する必要がありますCategory。カテゴリを作成した人だけが説明を編集できるように提供することを考えました。そこで、モデルに作成者フィールドを追加してみました。

class Category(models.Model):
        users = models.ManyToManyField(User,related_name='category_users')
        title = models.CharField(max_length=200)
        description = models.TextField()
        creator = models.ForeignKey(User,related_name='category_creator')

ただし、nullであるため、これによりIntegrityErrorwhenget_or_create()メソッドが実行されます。creator_id

...
category_title = category_title_form.cleaned_data['title']
category_title = category_title.strip()
if len(category_title)>0:
            category,created = Category.objects.get_or_create(title__iexact=category_title,defaults={'title':category_title,'description':category_title})
            if request.user not in category.users.all():
                category.users.add(request.user)                
                category.save()
            if created:
                category.creator = request.user
            category.save()

これを解決できる方法があるかどうか誰かに教えてもらえますか?

4

1 に答える 1

0

ユーザーがカテゴリを作成すると、そのカテゴリをユーザーの「カテゴリ セット」に追加できます --

category, created = user.category_set.get_or_create(
    title__iexact=category_title,
    defaults={'title': category_title, 'description': category_title}
)

user.category_set を介してカテゴリ テーブルにアクセスすると、user_id フィールドが自動的に維持されます。

この呼び出しで取得できるのはユーザーのカテゴリのみです。新しいカテゴリを作成すると、user_id が自動的に設定されます。

于 2012-10-01T04:24:13.083 に答える