0

我创建了一个模型,我在其中定义了一个地方,它有几个属性 (M2M),每个属性都有几个选择。用户可以为一个或多个选项投票,因此我定义了从选项到用户的 M2M 关系。但是我没有实现所需的功能,因为用户只连接到选择而不是连接到具有选择的特定位置。我的模型如下:

class Place(models.Model):
    StoreName=models.CharField(max_length=200)
    Pic=models.ImageField(upload_to="media",blank=True,null=True)
    Address=models.CharField(max_length=200)

    def __unicode__(self):
        return self.StoreName   

class TypeProperty(models.Model):
    Place = models.ManyToManyField(Place)
    TypePropertyName=models.CharField(max_length=42)
    def __unicode__(self):
        return self.TypePropertyName

class TypeChoices(models.Model):
    TypeProperty = models.ForeignKey(TypeProperty)
    TypeChoiceName=models.CharField(max_length=42)
    UserVoted=models.ManyToManyField(User,blank=True,null=True)

我怎样才能实现功能

用户已为特定地点选项投票

4

1 回答 1

2

User你可以得到TypeChoices

user_instance.typechoices_set.all()

然后,您可以遍历每个TypeChoicePlace通过TypeProperty属性访问查询集:

typechoice_instance.TypeProperty.Place.all()

然后你需要遍历每个Place来做任何事情。

现在,看着它,应该立即看出这里存在一些严重的缺陷。代码没有意义,而且不可读。这就是存在编码约定的原因。请仔细阅读Python 样式指南 (PEP8)

特别是对于您的代码,类上的属性应该全部小写,并且属性名称中的单词应该用下划线分隔,即store_nameNOT StoreName

然后,属性名称应该与它们所代表的内容平行:Place对于将返回多个位置的字段没有意义。命名它places以表明它返回多个项目(特别是返回查询集而不是模型实例)。

更新

如果需要,则需要向后工作并选择TypeChoices

TypeChoices.objects.filter(UserVoted=some_user, TypeProperty__Place=some_place)
于 2012-08-14T15:20:09.217 回答