0

在我的网络应用程序中,我在 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')

但是,这会导致运行IntegrityErrorwhenget_or_create()方法,因为creator_id为 null

...
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 回答