我有两个表,Housing
和Photo
(一对多关系)。
外壳表根据类型和事务字段返回unicode。我希望Photo
unicode成为Housing
的unicode +它自己的主键。这可能吗?
class Housing(models.Model):
type = models.CharField(max_length=16)
transaction = models.CharField(max_length=16)
def __unicode__(self):
if self.type.lower() == "house" and self.transaction.lower() == "sell":
return "HS" + str(self.pk+100)
elif self.type.lower() == "house" and self.transaction.lower() == "rent":
return "HR" + str(self.pk+100)
elif self.type.lower() == "apt" and self.transaction.lower() == "sell":
return "AS" + str(self.pk+100)
elif self.type.lower() == "apt" and self.transaction.lower() == "rent":
return "AR" + str(self.pk+100)
else:
return "ERROR" + str(self.pk+100)
class Photos(models.Model):
housing= models.ForeignKey(Housing)
photo_url = models.ImageField(upload_to="photos/", blank=True, null=True)
def __unicode__(self):
return "Img " + str(self.pk)
答案 0 :(得分:0)
您可以简单地引用相关的self.housing
对象属性,或将其转换为Unicode:
def __unicode__(self):
return u"Img({!r}, {})".format(self.pk, self.housing)
这会将self.housing.__unicode__()
的输出放入主键后生成的Unicode字符串中。这是有效的,因为使用unicode
自动插入unicode.format()
字符串对象将使用unicode(self.housing)
。
您的Housing.__unicode__()
方法可以稍微简化一下:
def __unicode__(self):
if (self.type.lower() not in ('house', 'apt') or
self.transaction.lower() not in ('sell', 'rent'):
return 'ERROR{}'.format(self.pk + 100)
type_, transaction = self.type[0].upper(), self.transaction[0].upper()
return '{}{}{}'.format(type_, transaction, self.pk + 100)
请注意,这会触发self.housing
关系的单独查询;如果要显示大量Photos
个实例,则每个Photos
实例显示一个额外的数据库查询最终会导致应用程序运行速度变慢。