【问题标题】:Django REST serializer return filtered manytomany fieldDjango REST 序列化程序返回过滤后的 manytomany 字段
【发布时间】:2021-08-31 19:33:08
【问题描述】:
class Person(models.Model):
    id = models.IntegerField(unique=True,null=False,primary_key=True,blank=False)
    name = models.CharField(max_length=10,null=False)
    username = models.CharField(max_length=10,unique=True)

class Attend(models.Model):
    date = models.DateField()
    people = models.ManyToManyField(Person,related_name="attend",through='attendperson')

我想返回 Person,只使用过滤器 Attend(按 date

例如:

id = 1 的人注册了这些参加日期 =2021-06-15 和另一个 日期 = 2021-06-29
我想对 Person 进行序列化,并过滤即将到来的 attend
注意:

p = Person.objects.filter(id=1)[0]
p.attend.filter(date__gte='2021-06-18')
serial = PersonSerializer(p).data

没有效果

【问题讨论】:

  • @AnkitTiwari 这将返回所有相关数据,我希望基于过滤器的部分相关对象对其进行序列化
  • 好的,你想要所有的数据,但你只得到一个?
  • 不,我只想要一个但获取所有数据
  • 访问 person.attend 时我想要过滤数据,而不是尝试 person.attend.filter(date__gte='2021-06-16') 时的所有数据 将其传递给序列化程序时不会影响 person.attend

标签: django django-models django-rest-framework


【解决方案1】:

你可以这样做:

p = Person.objects.filter(id=1, attend__date__gte='2021-06-16').get()

这将为您提供带有id=1 的人员对象,如果它具有date__gte=2021-06-16,否则您将获得Person.DoesNotExist 异常

【讨论】:

  • django.core.exceptions.FieldError:无法将关键字“日期”解析为字段。选项有:id、name、username
  • 编辑添加attend__date__gte
  • 仍然当序列化 Person 对象返回所有不参加 attend__date__gte='2021-06-16'
  • 你能用你拥有的最新代码更新你的问题吗?
猜你喜欢
  • 2015-04-03
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
相关资源
最近更新 更多