如何查看用户在其用户序列化程序中发布的广告



我有用户序列化程序,我需要在其中显示他发布的每个用户详细信息广告models.py:

    class Advertise(models.Model):
    title       = models.CharField(max_length=120)
    publisher   = models.ForeignKey(User, related_name='publisher',null=True, blank=True, on_delete=models.CASCADE)
    category    = models.CharField(choices=CATEGORIES, max_length=120)
    description = models.TextField(max_length= 200, null=True, blank=True)
    image       = models.ImageField(upload_to='project_static/Advertise/img', null=True, blank=False)
    price       = models.DecimalField(decimal_places=2, max_digits=20)
    timestamp   = models.DateTimeField(auto_now_add=True)
    approved    = models.BooleanField(default=False)
    location    = models.CharField(max_length=120 , null=True, blank=True)
    contact     = models.CharField(max_length=120,null=True, blank=True)
    def __str__(self):
        """show ad name in admin page"""
        return self.title

    def get_absolute_url(self):
        return reverse("advertise:advertise-detail", kwargs={"pk":self.pk})

serilaizers.py:

class AdSerializer(serializers.HyperlinkedModelSerializer):
    publisher = serializers.ReadOnlyField(source='publisher.username')
    url       = serializers.CharField(source='get_absolute_url')
    class Meta:
        model  = Advertise
        fields = ('url','id','title','publisher','category','description','price','timestamp','approved','location','contact')
class UserSerializer(serializers.HyperlinkedModelSerializer):
    publisher = AdSerializer(source='publisher_set', many=True)
    class Meta:
        model  = User
        fields = ['id', 'username','publisher']

错误:尝试获取序列化程序 UserSerializer 上的字段publisher的值时出错。序列化程序字段可能命名不正确,并且与User实例上的任何属性或键都不匹配。原始异常文本为:"用户"对象没有属性"publisher_set"。

好的,我通过进行一些更改来解决它:

class AdSerializer(serializers.HyperlinkedModelSerializer):
    publisher = serializers.ReadOnlyField(source='publisher.username')
    url = serializers.HyperlinkedIdentityField(view_name='advertise:ad_detailview', source='Advertise')
    class Meta:
        model  = Advertise
        fields = ('url','id','title','publisher','category','description','price','timestamp','approved','location','contact')
class UserSerializer(serializers.HyperlinkedModelSerializer):
    publisher_of = AdSerializer(many=True)
    url = serializers.HyperlinkedIdentityField(view_name='advertise:user-detail', source='User')
    class Meta:
        model  = User
        fields = ('url', 'id','username', 'email', 'publisher_of')

同样 models.py 发布者字段得到 related_name="publisher_of" 以获取更多 symantic此链接有所帮助https://www.django-rest-framework.org/tutorial/5-relationships-and-hyperlinked-apis/

最新更新