【问题标题】:How can I display the values from a ManyToMany Field in Django instead of their Id?如何在 Django 中显示 ManyToMany 字段的值而不是它们的 Id?
【发布时间】:2019-06-30 08:12:07
【问题描述】:

我有两个模型

  1. 影响者
class Influencer(models.Model):

    full_name = models.CharField('Full Name',max_length=255)
    username = models.CharField('Username',max_length=255,unique=True)
    photo = models.URLField(blank=True,max_length = 500)
    email_id = models.EmailField('Email Id',blank=True,max_length=500)
    categories = models.ManyToManyField(Category,blank=True,max_length=400)

和 2. 分类

class Category(models.Model):
    name = models.CharField(max_length=400)

    def __str__(self):
        return self.name

影响者具有多对多的领域类别。

显示所有影响者的我的视图功能是:

def index(request):
    influencers = Influencer.objects.all().order_by('followers')

    paginator = Paginator(influencers,16)
    page = request.GET.get('page')
    paged_listings = paginator.get_page(page)
    user_list = UserList.objects.all().filter(user_id = request.user.id)  
    queryset = list(chain(paged_listings,user_list))
    ser_query = serializers.serialize('json', queryset)
    return HttpResponse(ser_query,content_type='application/json')

HttpResponse 包含类别 ID 而不是类别名称,如下所示:

其中 categories 是一个包含类别 ID 的数组。 我想显示类别的名称而不是它们的 ID。

我认为这可以使用 Django Rest Framework 嵌套序列化程序来实现,但目前我没有使用 DRF。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    在 django 中有一个natural_key 方法可以将 id 转换为字符串

    在你的 models.py 文件中添加 natural_key 方法

    class Category(models.Model):
        name = models.CharField(max_length=400,)
    
        def __str__(self):
            return self.name
    
        def natural_key(self):
            return self.name
    

    然后在你的serializers.serializer 中你需要传递use_natural_foreign_keys=True,

    ser_query = serializers.serialize('json', influencers,indent=2,use_natural_foreign_keys=True,)
    

    【讨论】:

    • 不,绝对不是。你为什么会推荐这个?
    • 检查我更新的答案。希望你的问题会得到解决:)
    【解决方案2】:

    将您的数组元素 -- 整数值 -- 转换为字符串,然后从包含类别及其 id 的 dict 或元组访问

    id_to_category=["0":"whatever your category is","1":"whatever your category is","2":"whatever your category is","3":"whatever your category is"]
    
    id=str(ur_array[id])
    
    category_name=id_to_category[id]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2021-03-04
      • 2021-10-18
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      相关资源
      最近更新 更多