Django - 模型只从多个对象中选择1个对象

时间:2013-11-03 18:13:57

标签: django django-models

如何使用是/否字段制作模型,如果是,则将使用特定对象(图像)作为背景,并且不会选择其他图像。

我来这个模型:

class BackgroundImage(models.Model):
    user = models.ForeignKey(user)
    caption = models.CharField(max_length=200)
    image = models.ImageField(upload_to=get_upload_file_name)
    using_image = models.BooleanField()

但有了这个,我可以选择所有这些,而不仅仅是一个。

修改

让我们举一个个人资料图片的例子。用户可以拥有许多图像,但他只能选择一个作为个人资料图片。所以,如果他选择一个,其他人将取消选择。希望大家明白我的意思。如果不明白,请问我。如果我的模型不正确,请纠正我。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以添加save()挂钩,以确保给定用户没有其他BackgroundImage具有该标志。 (另外,出于性能原因,您希望该列为db_index=True。)

def save(self, *args, **kwargs):
    if self.use_image:
        BackgroundImage.objects.filter(user=self.user).update(use_image=False)
    super(BackgroundImage, self).save(*args, **kwargs)