模型.ForeignKey字段未显示在可浏览的API中

2024-04-16 15:34:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模型Requests和{},它们的外键返回到User模型。当尝试使用Django Rest框架发布外键数据时,我收到了一个空约束错误。django似乎不接受用户idrequester_idevent_admin_id)引用。在可浏览的API中,外键部分(requester_idevent_id)不存在。是不是被什么东西藏起来了?请注意,event_participant仅由外键组成,但它们在发布时出现在可浏览的API中。我不知道有什么区别

Missing event_admin_id foreignkey fieldMissing request_admin_id fk field

模型.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')

序列化程序.py

^{pr2}$

Tags: nameselfeventidtrueadminmodelslength
1条回答
网友
1楼 · 发布于 2024-04-16 15:34:13

希望这个还在活动,刚才有同样的问题,解决了。在

在我的例子中,我也有完全相同的问题,外键相关的属性没有显示在可浏览的api中,所以我认为这一定是与序列化程序有关的。在

原来这正是问题所在。如果您有一个ForeignKey约束,则根本不必处理嵌套序列化程序,只需将它们排除在序列化程序类之外!在

在你的情况下,应该是这样的:

(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中没有显示的属性。在

现在,该类的序列化程序必须如下所示:

^{pr2}$

注意,只要删去admin_user_id = serializers.StringRelatedField()行就可以了,现在您的api应该如预期那样显示字段,并且您可以选择一个用户来链接这个对象。在

我在我自己的项目中测试了你的问题,通过简单地获取你的模型和序列化程序,按照这个简单的步骤就完成了工作!在

希望这在将来对你或任何人都有帮助。干杯。在

相关问题 更多 >