【问题标题】:Letting a user create only one post and saving that post into user profile让用户只创建一个帖子并将该帖子保存到用户个人资料中
【发布时间】:2015-12-31 05:22:03
【问题描述】:

我有一个用户可以创建类别页面的应用。我想将其修改为用户只能创建一个。该页面将显示在个人资料页面中。我将 userena 用于用户配置文件系统。 事情是我不确定如何限制用户只创建一个类别页面。以及如何保存该页面,以便创建者可以访问(如编辑/删除)

这是我的views.py:

@login_required
def add_category(request):
    if request.method == 'POST':
        form = CategoryForm(request.POST)
        if form.is_valid():
            form.save(commit=True)
            return index(request)

    else:
        form = CategoryForm()

    return render(request, 'main/add_category.html', {'form':form})

我可以创建编辑/删除视图,只是不确定如何让用户只创建一个页面。

模型.py

class Category(models.Model): 
    name = models.CharField(max_length=128, unique=True)
    slug = models.CharField(max_length=100, unique=True)

    def save(self, *args, **kwargs):
        self.slug = uuslug(self.name,instance=self, max_length=100)
        super(Category, self).save(*args, **kwargs)

    def __unicode__(self): 
        return self.name

    def get_absolute_url(self):
        return 'category/%s' % (self.slug)

forms.py

class CategoryForm(forms.ModelForm):
    name = forms.CharField(max_length=128, help_text="plz enter")
    likes = forms.IntegerField(widget=forms.HiddenInput(), initial=0)
    slug = forms.CharField(widget=forms.HiddenInput, required=False)

    class Meta:
        model = Category
        fields =('name',)

编辑:

{{post.category}}

【问题讨论】:

  • 我是你的Category 模型,你应该有一个author 字段。在您的add_category 视图中,检查Category.objects.filter(author=request.user).exists()
  • 哦是啊我怎么没想到,让我试试
  • @AndreaCorbellini 不确定作者字段?嗯.....让我上传我的models.py
  • 您必须添加该字段(用户的外键)。如果您向我展示您的 CategoryForm,我可以为您提供分步解决方案。
  • @AndreaCorbellini 我只是在谷歌上搜索作者字段,我编辑了 forms.py。谢谢安德里亚,

标签: python django


【解决方案1】:

您希望每个用户最多创建一个类别。因此,首先,您需要知道用户是否已经创建了类别。

有很多方法可以做到这一点,我建议在你的模型中添加一个author 字段:

从 django.conf 导入设置 类类别(模型。模型): name = models.CharField(max_length=128, unique=True) slug = models.CharField(max_length=100, unique=True) # 这里我选择使用外键, # 但你也可以使用 OneToOneField。 作者 = models.ForeignKey(settings.AUTH_USER_MODEL, unique=True) ...

添加字段后记得generate and run the migrations:

$ python manage.py makemigrations
$ python manage.py migrate

这个新的author 字段应该自动设置,并且不能出现在您的表单中。鉴于您已经在使用fields = ['name'](并且您没有使用exclude),您不必修改您的CategoryForm

现在你必须修改你的视图,让它做两件事:

  1. 它在创建时设置author 字段;
  2. 检查当前用户是否已经创建了Category
@要求登录 def add_category(请求): 如果 Category.objects.filter(author=request.user).exists(): # 该用户已经创建了另一个类别。 # 向他显示错误消息,或将他重定向到另一个页面。 返回... 如果 request.method == 'POST': 类别=类别(作者=request.user) form = CategoryForm(request.POST, instance=category) 如果 form.is_valid(): form.save(提交=真) 返回索引(请求) 别的: 形式 = CategoryForm() 返回渲染(请求,'main/add_category.html',{'form':form})

【讨论】:

  • 我想我几乎得到了它们,我从来没有想过这样使用它...我得到 AttributeError: 'Settings' object has no attribute 'Auth_USER_MODEL' 错误,
  • @haloyoba: AUTH 是大写的
  • 突然间我在/没有这样的列处得到 OperationalError:main_category.author_id ....我试图解决这个问题它不起作用你知道为什么吗?我会上传它的来源,如果你能看一下,我将不胜感激
  • 可能是因为我删除了迁移文件?没有任何帖子....这是为什么
  • 无论何时更改模型,都必须生成迁移并运行它们
猜你喜欢
  • 2023-02-05
  • 2020-07-16
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多