如何强制该对象仅将布尔属性设置为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
定义在哪里?
另外,您应该在模型中将 thumb
和 filename
设置为 editable=False
,或者将它们从您的表单中排除,而不是向用户说明它们将被自动填充
它们用于测试目的。现在要编辑问题,删除错误的问题,我得到了这个模型的推荐和组合图像
【参考方案1】:
我认为您应该将testimonial_image
存储在其他位置,它应该等于所需Photograph
对象的id
。
【讨论】:
好主意。与其在数据库中给每张照片一个数据点,即使它们中的大多数无论如何都是错误的,你可以有一个只有 2 列的小表,一个相册的外键和一个封面照片的外键。跨度> 我希望用户能够上传图像并设置 attr。 这并不意味着您应该为任何照片存储此标志。将其存储在另一个表中(例如 j_syk 建议的),并将其设置为save()
。这就是你想要的。以上是关于如何强制该对象仅将布尔属性设置为true? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如果在配置中将布尔值设置为 true,我如何获得? [关闭]