Django模型:在fk模型中引用相同的字段两次

时间:2015-11-28 20:06:18

标签: django model-view-controller database-design django-models

所以这就是我对这个Django模型的问题。

我有一个foriegn键,可以在类组中使用SecretSantaGroup类。 我想在创作者和受让人中引用这个fk。

我想要的数据几乎是这样的: creator = self.group.members 受让人= self.group.members

但是我在处理它时遇到了问题,可以使用一些帮助。

我希望能够引用该特定群组中的所有用户,只是遇到了麻烦。

class SecretSantaGroups(models.Model):
    groupName = models.TextField()
    members = models.ManyToManyField(User)


    def __str__(self):
        return self.groupName

    class Meta:
        verbose_name_plural = 'Secret Santa Groups'

class assignees(models.Model):
    group = models.ForeignKey(SecretSantaGroups)
    #person that gives gifts
    creator = models.ForeignKey(self.group.members, null=True)
    #person who receives gift
    assignee = models.ForeignKey(self.group.members, null=True)

EDIT ---我使用了可怕的措辞,受让人的班级应该是谁在团队中获得谁。每个秘密圣诞老人组中有1人获得另一个人。所以礼品和礼品

class assignees(models.Model):
    group = models.ForeignKey(SecretSantaGroups)
    #person that gives gifts
    giver = models.???(self.group.members, null=True)
    #person who receives gift
    giftee = models.???(self.group.members, null=True)

1 个答案:

答案 0 :(得分:0)

除非我弄错了,否则您似乎要做的就是为var id_posts = from p in db.Posts join hp in db.Have_Privacy on p.id_post equals hp.id_post where hp.id_privacidade = 1 select p.texto; 定义与所有可能的用户的关联,然后定义那些用户被分配了#34;或者你想称之为什么。

我也不知道你是想在Django admin中编辑这些内容,还是在不同视图中编辑它们,但我如何定义模型是这样的:

var id_posts = from p in db.Posts
           join hp in db.Have_Privacy on p.id_post equals hp.id_post
           join prv in db.Privacy on hp.id_privacidade equals prv.id_privacidade
           where prv.nome = 'Private'
           select p.texto;

如果您想限制"已分配"的选择在Django admin中,您需要分两步完成此操作。首先,您需要分配哪些成员,然后您需要分配"已分配的" SecretSantaGroup中的对象,因此选项有限,然后您可以指定您想要的那些。

这可以通过自定义表单完成。我没有测试过这段代码:

class SecretSantaGroup(models.Model):
    name = models.CharField(max_length=255)
    creator = models.ForeignKey(User, related_name='creator')
    members = models.ManyToMany(User, related_name='members')
    assigned = models.ManyToMany(User, related_name='assigned', blank=True, null=True)

    def __unicode__(self):
        return self.name

然后,您可以在模型管理员上分配自定义管理表单。

如果您在公共场合这样做,您仍然需要相同类型的覆盖,并且您仍然必须分两步完成此操作,尽我所知。希望能帮到你。