我正在尝试构建一个应用程序,让人们查看政治家发布的推文,我正在努力用正确的方式来指定Twitter上的用户与离线用户之间的关系。例如,一个政治家可能有两个Twitter账户,这些账户可能会提到其他三个不是政治家的Twitter用户。现在,我有一个User表,其中包含来自Twitter API的信息(例如,关注者数量,推文数量),这些信息将包含来自政治家帐户和他/她提及的Twitter信息以及包含的立法者表格关于立法者的信息(例如,党,分庭)。
如何为Django正确设置该模型?如何访问模板中的用户和立法者信息?通过下面的设置,我无法从user.legislator_set访问立法者表中的任何内容。
class User(models.Model):
id = models.IntegerField(primary_key=True)
twitter_id = models.CharField(max_length=21, unique=True)
twitter_name = models.CharField(max_length=55, unique=True)
fullname = models.CharField(max_length=45)
followers = models.IntegerField()
following = models.IntegerField()
favorites = models.IntegerField()
tweets = models.IntegerField()
timezone = models.CharField(max_length=45, blank=True)
class Legislator(models.Model):
id = models.IntegerField(primary_key=True)
last_name = models.CharField(max_length=17, blank=True)
first_name = models.CharField(max_length=11, blank=True)
chamber = models.CharField(max_length=3, blank=True)
state = models.CharField(max_length=2, blank=True)
party = models.CharField(max_length=11, blank=True)
twitter_id = models.ForeignKey(User, to_field = "twitter_id", related_name="%(app_label)s_%(class)s_id")
twitter = models.ForeignKey(User, to_field = "twitter_name", related_name="%(app_label)s_%(class)s_name")
答案 0 :(得分:1)
利比。如果我理解你的要求,这似乎是最简单的起点 - 使用ForeignKey字段的多对一关系。 (这与lanzz的建议基本相同。)
class User(models.Model):
twitter_id = models.CharField(max_length=21, unique=True)
twitter_name = models.CharField(max_length=55, unique=True)
# ... other fields characterizing a Twitter account
legislator = models.ForeignKey('Legislator', blank=True, null=True)
class Legislator(models.Model):
last_name = models.CharField(max_length=17, blank=True)
first_name = models.CharField(max_length=11, blank=True)
# ... other fields characterizing a legislator
在您的Python代码中,给定一个Twitter帐户u
和立法者l
,您可以运行u.legislator = l
将立法者与Twitter帐户相关联。您也可以将其表达为l.user_set.add(u)
,这对我来说更有意义。
同样,您可以使用Legislator.user_set
访问Twitter帐户的RelatedManager。这是您在模板中循环或对您希望使用相关模型(任何/所有相关的Twitter帐户)而不是您拥有的(立法者)时进行其他查询。
还有一些使用示例in the docs。
在ForeignKey
字段中,我设置blank=True, null=True
以使关系可选。除非您在字段的选项中另行指定,否则Django将在legislator_id
表中创建并使用User
列来管理关系。