2017-09-04 19 views
1

我有兩個模型RequestsEvents有外鍵回到User模型。當試圖使用Django Rest Framework發佈外鍵數據時,我收到一個空約束錯誤。看來django不接受user_idrequester_idevent_admin_id)引用。在可瀏覽的API中,外鍵部分(requester_idevent_id)不存在。它被某物隱藏了嗎?請注意,event_participant僅由外鍵組成,但它們在發佈時顯示在可瀏覽的API中。我不知道這可能是區別models.ForeignKey字段沒有顯示在可瀏覽的API

Missing event_admin_id foreignkey field Missing request_admin_id fk field

models.py

from django.db import models 
from django.contrib.auth.models import AbstractUser 

# Create your models here. 
class User(AbstractUser): 
    user_job_description = models.CharField(max_length = 200) 
    user_profile_pic = models.ImageField(null = True, blank = True) 


class Event(models.Model): 
    def __str__(self): 
     return self.event_name 
    event_name = models.CharField(max_length = 100) 
    event_location = models.CharField(max_length = 100) 
    event_description = models.TextField(max_length = 300) 
    admin_user_id = models.ForeignKey(User, related_name = 'event_admin') 

class Request(models.Model): 
    def __str__(self): 
     return self.request_desc 
    requester_user_id = models.ForeignKey(User, related_name = 'requests') 
    request_desc = models.TextField(max_length = 100) 
    fulfiller_user_id = models.IntegerField(null = True, blank = True) 
    fulfilled_status = models.BooleanField() 


class Event_Participant(models.Model): 
    def __str__(self): 
     return str(self.event_id) 
    user_id = models.ForeignKey(User, related_name = 'event_attendee') 
    event_id = models.ForeignKey(Event, related_name = 'event') 

serializers.py

from django.contrib.auth import get_user_model 
from crewboardsdb.models import Event 
from crewboardsdb.models import Request 
from crewboardsdb.models import Event_Participant 
from rest_framework import serializers 


class UserSerializer(serializers.ModelSerializer): 
    requests = serializers.StringRelatedField(many = True) 
    event_admin = serializers.StringRelatedField(many = True) 
    event_attendee= serializers.StringRelatedField(many = True) 
    class Meta: 
     model = get_user_model() 
     fields = ('id','username','first_name','last_name','email','user_job_description','event_admin','requests', 'event_attendee',) 

class EventSerializer(serializers.ModelSerializer): 
    admin_user_id = serializers.StringRelatedField() 
    class Meta: 
     model = Event 
     fields = ('id', 'event_name', 'admin_user_id', 'event_description', 'event_location',) 
     lookup_field = 'admin_user_id' 




class RequestSerializer(serializers.ModelSerializer): 

    requester_user_id = serializers.StringRelatedField() 
    class Meta: 
     model = Request 
     fields = ('id', 'request_desc', 'fulfilled_status','requester_user_id','fulfiller_user_id',) 
     lookup_field = 'requester_user_id' 




class EventParticipantSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Event_Participant 
     fields = ('id', 'event_id', 'user_id') 
+0

我應該補充說,這些字段昨天可見,我不知道什麼可以改變。 – user2904913

回答

1

希望這仍然是積極,有同樣的問題他們剛纔想出來了。

在我的情況下,我也遇到了完全相同的問題,外鍵相關的屬性沒有顯示在可瀏覽的api內,所以我認爲它必須是序列化程序的東西。

原來就是這個問題。如果你有一個ForeignKey約束,你根本不需要處理nestes序列化器,只是把它們放在你的序列化器類中!

在你的情況,這將是這樣的:

(Event Model) 
class Event(models.Model): 
    def __str__(self): 
     return self.event_name 
    event_name = models.CharField(max_length = 100) 
    event_location = models.CharField(max_length = 100) 
    event_description = models.TextField(max_length = 300) 
    admin_user_id = models.ForeignKey(User, related_name = 'event_admin') 

這裏您admin_user_id可能未顯示在你瀏覽的API了屬性。現在

,這是你的那個類串行如何有看起來像:

class EventSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Event 
     fields = ('id', 'event_name', 'admin_user_id', 'event_description', 'event_location',) 
     lookup_field = 'admin_user_id' 

注意,只是裁剪線admin_user_id = serializers.StringRelatedField()做的工作,現在你的API應該顯示領域的預期和你能夠選擇一個用戶來鏈接這個對象。

我在我自己的項目中通過簡單地考慮你的模型和序列化程序來測試你的問題,按照這個簡單的步驟完成了這項工作!

希望這仍然可以幫助你或任何人在未來。乾杯。

相關問題