Предельный выбор иностранных ключей в DRF - PullRequest
0 голосов
/ 02 июля 2018

У меня есть модель Товар:

class Commodity(models.Model):
    shop = models.ForeignKey(Shop, related_name='commodity', on_delete=models.CASCADE)
    brand = models.ForeignKey(Brand, blank=True, null=True, on_delete=models.CASCADE)
    price_old = models.DecimalField(max_digits=10, decimal_places=2)
    price_new = models.DecimalField(max_digits=10, decimal_places=2)

Я пытался использовать limit_choices_to, и это не сработало. У меня есть сериализатор:

class CommoditySerializer(serializers.ModelSerializer):
    image = CommodityImageSerializer(many=False)

    def get_queryset(self):
        user = self.context['request'].user
        queryset = Commodity.objects.filter(shop__company__user=user)
        return queryset

    class Meta:
        model = Commodity
        fields = ('id', 'shop', 'brand', 'price_old', 'price_new')

Этот get_queryset также не помогает мне. Наконец, у меня есть обычный CreateAPIView, и этот метод также не помогает мне. Как я могу ограничить использование внешних ключей? Мне нужно разрешить создавать товары для моего пользователя только в его магазинах. Спасибо!

1 Ответ

0 голосов
/ 02 июля 2018

Полагаю, вы можете просто реализовать метод validate_shop для этого:

class CommoditySerializer(serializers.ModelSerializer):
    image = CommodityImageSerializer(many=False)

    def validate_shop(self, value):
        user = self.context['request'].user
        if value.company.user == user:
            return value
        raise serializers.ValidationError('Invalid shop!')

    class Meta:
        model = Commodity
        fields = ('id', 'shop', 'brand', 'price_old', 'price_new')
...