kd12345
kd12345

Reputation: 793

Django - Many to One relationship not working

i am trying to create a relationship between my user model and my article model.

Each user can have many articles but each article belongs to one user.

When i go to my rest framework and create a user and an article they are not linked together. I think i am missing something in the relationship since when i enter my Article Details i am not entering anything related to the user.

MyApp>models.py

from django.db import models

class User(models.Model):
    firstname = models.CharField(max_length=255, null=True, blank=False)
    lastname = models.CharField(max_length=255, null=True, blank=False)
    email = models.EmailField(null=True, blank=False)
    timestamp = models.DateTimeField(auto_now_add=True)


    def __str__(self):
        return self.email 

class Article(models.Model):
    user: models.ForeignKey(User, null=True, blank=False, on_delete=models.SET_NULL)
    title = models.CharField(max_length=255, null=True, blank=False)
    timestamp = models.DateTimeField(auto_now_add=True)


    def __str__(self):
        return self.title 

MyApp>serializer.py

from rest_framework import serializers
from .models import User, Article

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


class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ['id', 'title']

MyApp>views.py

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

class ArticleViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer

Upvotes: 0

Views: 133

Answers (1)

kd12345
kd12345

Reputation: 793

i had 2 problems in my code:

  1. As Matt Howell pointed out in the comments, in MyApp>models.py, i had a typo in my Article definition -- i need user = not user :

  2. in MyApp>serializer.py, i had to include user in my fields

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ['id', 'title', 'user']

Upvotes: 1

Related Questions