Code Cracker
Code Cracker

Reputation: 159

Unable to serialize multiple objects to save in database in django rest framework

I am messed up with serializing multiple objects. I tried some solutions from stackoverflow but none of them worked for me. please help me to solve this.

models.py

class NewsCategories(models.Model):

    category = models.CharField(default="",max_length=30)
    def __str__(self):
        return self.category

class TrendingTopics(models.Model):
    
    topics = models.CharField(default="",max_length=30)
    def __str__(self):
        return self.topics


class UserNewsIntrests(models.Model):
    user = models.OneToOneField(NewsreaderUserModel,on_delete=models.CASCADE)
    user_news_categories = models.ManyToManyField(NewsCategories)
    user_topics = models.ManyToManyField(TrendingTopics)
    def __str__(self):
        return self.user.user_email

serializers.py

class NewsCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = NewsCategories
        fields = '__all__'

class TrendingTopicsSerializer(serializers.ModelSerializer):
    class Meta:
        model = TrendingTopics
        fields = '__all__'
        
class NewsIntrestSerializer(serializers.ModelSerializer):
    user_news_categories = NewsCategorySerializer(many=True) 
    user_topics = TrendingTopicsSerializer(many=True)
        
    class Meta:
        model = UserNewsIntrests
        fields = ['user_news_categories','user_topics','user']
        
    

        

what i m getting this time on read operation

{
    "profile": {
        "user_email": "[email protected]",
        "first_name": "test",
        "last_name": "user",
        "age": 21,
        "last_active": "2021-04-28T14:21:08.613142Z",
        "is_active": true,
        "profile_image": "/media/profile_images/default/profile.png"
    },
    "news_intrest": {
        "user_news_categories": [
            {
                "id": 1,
                "category": "Technology"
            },
            {
                "id": 2,
                "category": "Business"
            }
        ],
        "user_topics": [
            {
                "id": 1,
                "topics": "Putin"
            }
        ],
        "user": "[email protected]"
    }
}

What i want in create request?

Actually i want to create a newsintrest for a user. All the news categories and topics are already in database. i can assign categories and topics to a user via admin pannel but i want it to be done on user side also. I am totally confused how to do it please help me.

What i am passing (json)?

{
    'user_news_category': [{'category': 'Business'}, {'category': 'Sports'}, {'category': 'Health'}],
    'user_topics': [{'topics': 'Narendra Modi'}], 
    'user': '[email protected]'
}

I want this json data to be created in newsintreset but i am stucked how to do it.

admin pannel view

Upvotes: 2

Views: 385

Answers (1)

vahidtwo
vahidtwo

Reputation: 88

if you use modelViewSet you must be pass data like this

{
    'user_news_category': [1,2,3], # id of category
    'user_topics': [1], 
    'user': 1 # if email is your primary key pass email
}

but if you use APIView i must be see your code in view side

Upvotes: 1

Related Questions