【问题标题】:Unique DB entry to the user [duplicate]用户的唯一数据库条目[重复]
【发布时间】:2015-08-05 19:15:09
【问题描述】:

我有一个接受列表名称的模型。我只希望列表名称禁用每个用户的重复项。目前,一个用户不能输入两次“食谱”,但如果另一个用户没有“食谱”列表名称,他们也不能输入它,因为该字段是唯一的。是否可以使列表名仅对当前登录的用户唯一?

型号

class newlist(models.Model):

    user = models.ForeignKey(User)
    list_name = models.CharField(max_length = 100, unique = True)
    picture = models.ImageField(upload_to='profiles/', default = "/media/profiles/default.jpg")
    slug = AutoSlugField(populate_from='list_name', default = '')

    def __str__(self):
        return self.list_name

【问题讨论】:

  • “对当前登录用户唯一”还是“对每个用户唯一”?

标签: django


【解决方案1】:

使用模型Metaunique_together。你可以找到优秀的文档here

class newlist(models.Model):
    class Meta:
        unique_together=('user','list_name')
    user = models.ForeignKey(User)
    list_name = models.CharField(max_length = 100)
    picture = models.ImageField(upload_to='profiles/', default = "/media/profiles/default.jpg")
    slug = AutoSlugField(populate_from='list_name', default = '')

    def __str__(self):
        return self.list_name
    def save(self,*args,**kwargs):
        try:
            return super(newlist,self).save(*args,**kwargs)
        except IntegrityError: # This is raised if the object can't be saved.
            # Your error handling code
            from django.core.exceptions import PermissionDenied
            raise PermissionDenied()

【讨论】:

  • 太棒了!有没有办法为重复项而不是 django 错误页面呈现表单错误?
猜你喜欢
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 2014-07-17
  • 2017-05-08
  • 2012-10-16
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多