如何强制该对象仅将布尔属性设置为true? [复制]

Posted

技术标签:

【中文标题】如何强制该对象仅将布尔属性设置为true? [复制]【英文标题】:how to enforce that object is only with a boolean attr set to true? [duplicate] 【发布时间】:2011-08-29 15:56:28 【问题描述】:

可能重复:Unique BooleanField value in Django?

在照片模型上,我想选择它作为列出多个画廊的页面上画廊封面图像的照片。

我写了以下代码,但看起来我创建了一个循环

class Photograph(models.Model):
    project = models.ForeignKey(Project)
    description = models.TextField(max_length=5000, default=False)
    image = models.ImageField(upload_to="photographs/")
    thumb = models.ImageField(upload_to="photographs/", blank=True, help_text="Ignore this field, it will autopopulate")
    thumbnail = models.CharField(max_length=250, blank=True)
    filename = models.CharField(max_length=100, default=False, help_text="Ignore this field, it will autopopulate")
    portfolio_image = models.BooleanField(default=False, help_text="Do you want this image to appear as the portfolio image?")
    date_added = models.DateTimeField('date published')

def save(self):
    # get filename for use later
    filename, extension = os.path.splitext(self.image.name)
    self.filename = slugify(filename)
    self.thumbnail = filename+"-t.jpg"

    # is this the testimonial image, if so, unselect other images
    if self.testimonial_image is True:
        others = Photograph.objects.filter(project=self.project).filter(testimonial_image=True)
        pdb.set_trace()
        for o in others:
            o.testimonial_image = False
            o.save()

发生了什么

上传图片,设置为 投资组合图片 代码运行并命中 if 语句 填充其他人,到达 o.save() 并最终以完全相同的方式运行 我定义的代码。

循环!

如何解决这个问题?

【问题讨论】:

testimonial_image 定义在哪里? 另外,您应该在模型中将 thumbfilename 设置为 editable=False,或者将它们从您的表单中排除,而不是向用户说明它们将被自动填充 它们用于测试目的。现在要编辑问题,删除错误的问题,我得到了这个模型的推荐和组合图像 【参考方案1】:

我认为您应该将testimonial_image 存储在其他位置,它应该等于所需Photograph 对象的id

【讨论】:

好主意。与其在数据库中给每张照片一个数据点,即使它们中的大多数无论如何都是错误的,你可以有一个只有 2 列的小表,一个相册的外键和一个封面照片的外键。跨度> 我希望用户能够上传图像并设置 attr。 这并不意味着您应该为任何照片存储此标志。将其存储在另一个表中(例如 j_syk 建议的),并将其设置为 save()。这就是你想要的。

以上是关于如何强制该对象仅将布尔属性设置为true? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

属性描述对象

如果在配置中将布尔值设置为 true,我如何获得? [关闭]

将学说实体布尔字段设置为 0 而不是 null

根据布尔值更改按钮图像

Javascript Bug:设置音频对象控件属性 True = = False

if语句选择器的区别