这似乎是一个愚蠢而简单的问题。我试图去做这项工作,但是我不能看到木头的树木。
给出一个简单的模型,例如(我已经跳过了导入):
class Location(models.Model):
description = model.CharField(max_length=40)
address1 = model.CharField(max_length=40)
# ..... (and so on)
tel = model.CharField(max_length=12)
和另一个与它有关系的人:
class InformationRequest(models.Model):
source = models.ForeignKey(Location)
request_date = Models.DateField(default=datetime.now())
# ..... (and so on)
如何添加引用' tel'的字段?来自Location模型的字段,可以自动填充,也可以从Django admin中的选择列表填充。
答案 0 :(得分:1)
好的,如果我说得对,那么,nomen est omen,彻底混淆了关系数据库的工作方式:]关键原则之一是消除冗余。两个表中不应存储彼此相关的完全相同的数据。
我认为您当前的模型是正确的。鉴于这些情况(我忽略了你有其他不可空字段的事实)......
>>> loc = Location()
>>> loc.tel = "123"
>>> loc.save()
>>> info = InformationRequest()
>>> info.source = loc
>>> info.save()
...您可以从tel
实例访问InformationRequest
,如下所示:
>>> info.source.tel
'123'
您还可以创建方法......
class InformationRequest(models.Model):
source = models.ForeignKey(Location, related_name="information_requests")
request_date = Models.DateField(default=datetime.now())
# ..... (and so on)
def contact_tel(self):
return self.source.tel
......并且像这样:
>>> info.contact_tel()
'123'
你甚至可以把它变成属性......
class InformationRequest(models.Model):
source = models.ForeignKey(Location, related_name="information_requests")
request_date = Models.DateField(default=datetime.now())
# ..... (and so on)
@property
def contact_tel(self):
return self.source.tel
......并且没有括号:
>>> info.contact_tel
'123'
无论如何,你应该以编程方式绕过它。希望有所帮助。