具有两个领域独特组合的Django模型

2024-04-24 09:17:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个django模型如下

class MySubject(models.Model):
    name=models.CharField(unique=True,max_length=50)
    description=models.TextField(blank=True)
    slug=models.SlugField(editable=False)

    class Meta:
        verbose_name_plural="MySubjects"

    def __unicode__(self):
        return self.name

    def save(self,*args,**kwargs):
        self.name=self.name.strip()
        self.slug=slugify(self.name)
        super(MySubject,self).save(*args,**kwargs)

    @models.permalink
    def get_absolute_url(self):
        return ('subject_detail',(),{'slug':self.slug})

我需要使造物主+名字独一无二,这样我就可以调用了

^{pr2}$

以下是正确的方法吗?在

class MySubject(models.Model):
        name=models.CharField(max_length=50)
        creator = models.ForeignKey(User,null=True)
        description=models.TextField(blank=True)
        slug=models.SlugField(editable=False)

        class Meta: 
            verbose_name_plural="MySubjects"
            unique_together = ('name', 'creator',)
         ...

我想我必须在做出改变后使用south来做一个migration。我是要单独做schemamigration还是必须做datamigration?在


Tags: nameselftruemodelmodelsdefdescriptionlength
1条回答
网友
1楼 · 发布于 2024-04-24 09:17:13

添加唯一约束是模式迁移。但是,如果现有数据会导致完整性错误,则还需要进行数据迁移。在

如果您真的需要不区分大小写的唯一约束,则需要稍微复杂一点:

Case insensitive unique model fields in Django?

另请参见:https://code.djangoproject.com/ticket/14564

如果您总是将get_or_create与iexact一起使用,您可能会没事。但是,您不应该手动创建名为“foo”和“foo”的两个,因为这是允许的,然后您调用get_或_create将导致多个对象返回。。如果我想得对的话。在

相关问题 更多 >