0
class tags(models.Model):
    """ This is the tag model """
    tag = models.CharField(max_length=15)               # Tag name
    tagDescription = models.TextField()                 # Tag Description
    tagSlug = models.CharField(max_length=400)          # Extra info can be added to the existing tag using this field
    createdAt = models.DateTimeField(auto_now_add=True) # Time at which tag is created
    updatedAt = models.DateTimeField(auto_now=True)     # Time at which tag is updated

class stores(models.Model):
    """ This is the store model """
    storeName = models.CharField(max_length=15)                                          # Store Name
    storeDescription = models.TextField()                                                # Store Description
    storeURL = models.URLField()                                                         # Store URL
    storePopularityNumber = models.IntegerField(choices=PRIORITY_CHOICES,default=2)                # Store Popularity Number  
    storeImage = models.ImageField(upload_to="images")                                   # Store Image 
    storeSlug = models.CharField(max_length=400)                                         # This is the text you see in the URL
    createdAt = models.DateTimeField(auto_now_add=True)                                  # Time at which store is created
    updatedAt = models.DateTimeField(auto_now=True)                                      # Time at which store is updated
    storeTags = models.ManyToManyField(tags)                                             # All the tags associated with the store

我想找出与特定标签相关的所有商店。 for t in tags.objects.all(): print ([str(a.storeName) for a in t.stores_set.all()]) 通过使用上面的for循环,我可以获得与所有商店相关的所有标签......但实际上我正在使用Django rest-frameWork......现在我有一个使用序列化程序返回相关商店名称的视图到商店...

class tagList(generics.ListAPIView,APIView):

    serializer_class = getAllTagsDetailSerializer

    def get_queryset(self):
        key = self.request.QUERY_PARAMS.get('appKey', None)
        getTagName = self.request.QUERY_PARAMS.get('tagName', None)
        keyData = app.objects.filter(appKey=key).exists()    
        try:
            if keyData == True:

                return tags.objects.filter(tag=getTagName)
            else:
                raise exceptions.PermissionDenied
        except app.DoesNotExist:
            pass

`class getAllStoresDetailSerializer(serializers.ModelSerializer):
    storeImage = serializers.Field(source='imageURL')
    storeTags =serializers.Field(source='StoreTags')

    class Meta:
        model = stores
        fields = ('storeName','storeDescription','storeURL',
                    'storePopularityNumber','storeImage','storeTags',
                    'storeSlug','createdAt','updatedAt'
                 )`


class getAllTagsDetailSerializer(serializers.ModelSerializer):
    tagStores = RelatedField(Many=True)
    class Meta:
        model = tags
        fields = ('tagStores'                   
                    )

但这不起作用...有人可以帮我吗...

4

3 回答 3

0

很简单,用你的标签:

tag.store_set.all()
于 2013-04-17T16:26:09.683 回答
0
t = Tag.objects.get(pk=1)
stores = t.stores_set.all()
于 2013-04-17T16:26:27.440 回答
0

我找到了解决方案...

这是处理获取请求的类...

class tagList(generics.ListAPIView,APIView):
    model = tags
    serializer_class = getAllTagsDetailSerializer

    def get_queryset(self):
        key = self.request.QUERY_PARAMS.get('appKey', None)
        getTagName = self.request.QUERY_PARAMS.get('tagName', None)
        keyData = app.objects.filter(appKey=key).exists()    
        try:
            if keyData == True:
                return tags.objects.filter(tag=getTagName)
            else:
                raise exceptions.PermissionDenied
        except app.DoesNotExist:
            pass

这个序列化器类:

class getAllTagsDetailSerializer(serializers.ModelSerializer):
    tagStores = serializers.Field(source='getAllStoreNames')

    class Meta:
        model = tags
        fields = ('tagStores')

这是我的标签模型:

class tags(models.Model):
    """ This is the tag model """
    tag = models.CharField(max_length=15)               # Tag name
    tagDescription = models.TextField()                 # Tag Description
    tagSlug = models.CharField(max_length=400)          # Extra info can be added to the existing tag using this field
    createdAt = models.DateTimeField(auto_now_add=True) # Time at which tag is created
    updatedAt = models.DateTimeField(auto_now=True)     # Time at which tag is updated

    def __unicode__(self):
        """Method to display string correctly"""
        return unicode(self.tag)

    def getAllStoreNames(self):

        for t in tags.objects.filter(tag=self.tag):      
            return  ([str(a.storeName) for a in t.stores_set.all()])

    class Meta:
        """Meta class to control display Behavior of the Model name """
        verbose_name_plural = "Tags"

如果有人想知道,让我解释一下...在我的类 tagList 中,我设置了一个由 return 设置的查询,tags.objects.filter(tag=getTagName)它将根据指定的 tagName 过滤掉所有商店的名称...然后它转到我所在的序列化程序类正在设置tagStores = serializers.Field(source='getAllStoreNames')然后它读取字段值并调用getAllStoreNames标签模型内部的标签模型,它返回与商店相关的标签的名称......如果有人知道更有效的解决方案,请分享......

于 2013-04-18T08:41:43.197 回答