[英]Django How to filter all objects foreign key field
表:event_rewards
表:奖励
序列化器:EventRewardSerializer
序列化器:奖励序列化器
模型.py
class Reward(models.Model):
id = models.BigAutoField(primary_key=True)
category = models.IntegerField(blank=True, null=True)
count = models.IntegerField(blank=True, null=True)
image = models.CharField(max_length=255, blank=True, null=True)
name = models.CharField(max_length=255)
price = models.IntegerField(blank=True, null=True)
class Meta:
db_table = 'reward'
class EventRewards(models.Model):
event = models.ForeignKey(Event, models.DO_NOTHING)
rewards = models.OneToOneField('Reward', related_name='event_id', on_delete=models.CASCADE)
class Meta:
db_table = 'event_rewards'
序列化程序.py
class EventRewardSerializer(serializers.ModelSerializer):
class Meta:
model = EventRewards
fields = ['event', 'rewards']
class RewardSerializer(serializers.ModelSerializer):
event_id = serializers.SlugRelatedField(
read_only=True,
slug_field='event_id'
)
class Meta:
model = Reward
fields = ['id', 'category', 'count', 'image', 'name', 'price', 'event_id']
视图.py
class JoinRewardView(APIView):
def get(self, request, pk_event, pk_post, pk_user, formant=None):
reward_list = Reward.objects.all().filter(event_id=pk_event)
print(reward_list)
reward_list_serializer = RewardSerializer(data=reward_list, many=True)
reward_list_serializer.is_valid()
print(reward_list_serializer.data)
return Response(reward_list_serializer.data, status=status.HTTP_400_BAD_REQUEST)
邮递员 -> all().filter(event_id=1)
[ { "id": 1, "category": 1, "count": 100, "image": "img3", "name": "coke", "price": 1000, "event_id": 1 } ]
邮递员 -> 全部()
[ { "id": 1, "category": 1, "count": 100, "image": "img3", "name": "coke", "price": 1000, "event_id": 1 }, { "id": 2, "category": 1, "count": 10, "image": "img4", "name": "coffee", "price": 2500, "event_id": 1 } ]
all() -> 2 个数据 -> 好的!
all().filter(category=1) -> 2 个数据 -> 好的!
all().filter(event_id=1) -> 1 个数据 -> 为什么???
更改 ModelSerializer 并使用 Table__Column
序列化程序.py
class EventRewardSerializer(serializers.ModelSerializer):
class Meta:
model = EventRewards
fields = ['event', 'rewards']
class RewardSerializer(serializers.ModelSerializer):
event_reward = EventRewardSerializer()
class Meta:
model = Reward
fields = ['id', 'category', 'count', 'image', 'name', 'price', 'event_reward']
视图.py
def get(self, request, pk_event, pk_post, pk_user, formant=None):
reward_list = Reward.objects.all().filter(event_reward__event=1)
print(reward_list)
reward_list_serializer = RewardSerializer(data=reward_list, many=True)
reward_list_serializer.is_valid()
return Response(reward_list_serializer.data, status=status.HTTP_400_BAD_REQUEST)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.