我有两个名为Event和EventUser的模型。
class EventUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
def __str__(self):
u = User.objects.get(pk=self.user_id)
return u.username
class Event(models.Model):
EVENT_TYPE_CHOICES = (
(1, 'Food & Beverage'),
(2, 'Party'),
(3, 'Natural'),
(4, 'Historical'),
(5, 'Educational'),
(6, 'Sportive'),
)
name = models.CharField(max_length=50)
event_type = models.IntegerField(choices=EVENT_TYPE_CHOICES)
date_time = models.DateTimeField()
location = models.CharField(max_length=255)
creator = models.ManyToManyField(User, related_name='event_creator')
info = models.CharField(max_length=255, default='')
users = models.ManyToManyField(EventUser, blank=True)
def __str__(self):
return self.name
因此,很自然ManyToManyField正在使用event_id和eventuser_id创建新表,但是,我想使用用户名而不是eventuser_id。或者,如果我在请求时可以接收用户名而不是id,则可以保持这种状态。
我想说的是;
当我获得用户字段时,我希望在响应时看到用户名,而不是像上面的图像那样的ids。
答案 0 :(得分:0)
您可以使用CustomRelationalField来显示用户名而不是ID,如下所示:
class UserListingField(serializers.RelatedField):
def to_representation(self, value):
return '{}'.format(value.user.username)
def to_internal_value(self, value):
# assumption, value is id of EventUser
return value
class YourSerializer(serializers.ModelSerializer):
users = UserListingField(many=True)
class Meta:
...