【发布时间】:2021-12-28 10:29:36
【问题描述】:
我有一个类似于下面代码的 Django 模型。目前,当我使用 django rest 框架创建一个新的菜单实例时,dish 列包含平台上所有用户创建的选项。 我应该如何过滤菜列,以便它只有用户创建的选项? 我应该在视图还是序列化程序中这样做?
感谢您提前回复。
class Dish(models.Model):
user = models.ForeignKey(
User, on_delete=models.CASCADE, null=True, blank=True)
title = models.CharField(max_length=280)
description = models.CharField(max_length=280)
image = models.ImageField(upload_to='static/images/post_image',
default='static/images/post_image/default.jpg')
def __str__(self):
return f'{self.title}'
def get_image_url(self, obj):
return obj.image.url
class Menu(models.Model):
user = models.ForeignKey(
User, on_delete=models.CASCADE, null=True, blank=True)
title = models.CharField(max_length=280)
description = models.CharField(max_length=280)
dish = models.ManyToManyField(Dish)
price = models.SmallIntegerField(
validators=[MinValueValidator(1), MaxValueValidator(10000)], default=None)
def __str__(self):
return f'{self.title}'
这就是我最终为那些将来遇到同样问题的人做的事情。
class UserDishForeignKey(serializers.PrimaryKeyRelatedField):
def get_queryset(self):
user = self.context['request'].user
return Dish.objects.filter(user=user)
class MenuCreateSerializer(serializers.ModelSerializer):
dish = UserDishForeignKey(many=True)
class Meta:
model = Menu
fields = ['title', 'description', 'dish', 'price', ]
read_only_fields = ['user', ]
def get_user(self, obj):
return str(obj.user.username)
【问题讨论】:
-
我建议通过使用下面Tuomo的答案修改
get_queryset()方法在视图中进行。
标签: python django django-rest-framework