Как сериализовать два класса с отношением один ко многим в django

это мои модели

  class Users(models.Model) :
        name = models.CharField(max_length=20 , blank=False , null=False)
        email = models.EmailField(max_length=50 , blank=True , null=True)
        password = models.CharField(max_length=30 , blank=False , null=False)
        birthday = models.DateField(null=False)
        photo = models.ImageField(upload_to = 'user_photos/%y/%m/%d')
        #friend = models.ManyToManyField('self',through='Notif',null=True,related_name='friend')
     
    
    class Product(models.Model):
        pub_date = models.DateTimeField(default=datetime.now)
        price = models.DecimalField(max_digits=100000,decimal_places=5,null=False,blank=False)
        size = models.IntegerField(null=True,blank=True,default='undefined')
        photo = models.ImageField(upload_to = 'product_photos/%y/%m/%d',null=True)
        #for 1--n relation with users
        user_id = models.ForeignKey(Users,on_delete=models.CASCADE,null=True,related_name='user')

это мой serializers.py

class ProductSerializer (serializers.ModelSerializer):
    class Meta :
        model = Product
        fields = '__all__'

class UsersSerializer(serializers.ModelSerializer):
    class Meta:
        model = Users
        fields = '__all__'

Я хочу отправить объект продукта с электронной почтой его пользователя. что я должен сделать в сериализаторах и представлениях, чтобы сделать это обратите внимание, что я использую представления на основе функций в своих представлениях

Прежде всего, вам следует изменить user_id на user.

в serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = Users
        fields = ['id','email']

class ProductSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)
    class Meta :
        model = Product
        fields = '__all__'

в представлениях, основанных на функциях:

def get_product(request,product_id):
    instance = Product.objects.select_related('user').get(id=product_id)
    serializer = ProductSerializer(instance)
    return Response(serializer.data)

ПРИМЕЧАНИЕ: select_related используется для получения продукта с пользователем в одном запросе (join query).

Вернуться на верх