我创建了一个模型,我定义了一个Place,它有几个属性(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)
如何实现功能
用户投票赞成针对特定地点 的选择
答案 0 :(得分:2)
从User
,您可以获得TypeChoices
:
user_instance.typechoices_set.all()
然后,您可以遍历每个TypeChoice
并通过Place
属性访问TypeProperty
查询集:
typechoice_instance.TypeProperty.Place.all()
然后你需要遍历每个Place
来做任何事情。
现在,看着这一点,应该立即明白这里存在一些严重的缺陷。代码毫无意义,而且不可读。这就是存在编码约定的原因。请仔细阅读Python Style Guide (PEP8)。
特别是对于您的代码,类的属性应该都是小写的,属性名称中的单词应该用下划线分隔,即store_name
NOT StoreName
。
然后,属性名称应该与它们代表的内容平行:Place
对于将返回多个位置的字段没有意义。将其命名为places
以指示它返回多个项目(特别是返回一个查询集而不是模型实例)。
<强>更新强>
如果您需要,则需要向后工作并选择TypeChoices
:
TypeChoices.objects.filter(UserVoted=some_user, TypeProperty__Place=some_place)