Я использую структуру Django REST.django rest framework, non pk вложенные сериализаторы
У меня есть несколько моделей, которые выглядят так:
class Users(models.Model):
userfieldid = models.AutoField(db_column='FieldID', primary_key=True) # Field name made lowercase.
forename = models.CharField(db_column='Forename', max_length=50, blank=True, null=True) # Field name made lowercase.
surname = models.CharField(db_column='Surname', max_length=50, blank=True, null=True) # Field name made lowercase.
student_number = models.CharField(db_column='ExternalFieldID', max_length=255, blank=True, null=True) # Field name made lowercase.
class Events(models.Model):
eventfieldid = models.AutoField(db_column='FieldID', primary_key=True) # Field name made lowercase.
eventdescription =models.CharField(db_column='EventDescription', max_length=200, blank=True, null=True) # Field name made lowercase.
eventdate = models.DateTimeField(db_column='EventDate', blank=True, null=True) # Field name made lowercase.
user= models.ForeignKey(Users,db_column='UserFieldID',related_name="holder")
, чтобы получить данные по каждой записи пользователя с номером студента я использую этот вид (переопределяет QuerySet по умолчанию):
class UserDetail(generics.ListAPIView):
serializer_class = UserDetailSerializer
def get_queryset(self):
student_number=self.kwargs['student_number']
return Users.objects.using("lockers").filter(student_number=student_number)
и это сериализатору
class UserDetailSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model=Users
fields=('student_number','forename','surname')
что все работает нормально. Однако я хотел бы связать сериализаторы, чтобы показать все события в модели событий для записей указанного пользователя. Однако, как я понимаю (и я вполне мог бы получил это неправильно), просто добавив в сериализатор:
class EventsSerializer(serializers.ModelSerializer):
class Meta:
model=Events
class UserDetailSerializer(serializers.HyperlinkedModelSerializer):
events=EventsSerializer(many=True,read_only=True)
class Meta:
model=Users
fields=('student_number','forename','surname','events')
Это не будет работать, как события сериализатор будет пытаться соответствовать его звукозаписывающему в PKs против student_number, что не сопоставимо.
Есть ли способ заставить EventSerializer искать события для пользователей, использующих пользователей pk (userfieldid) вместо этого?
Надеюсь, я объяснил это хорошо. Это все очень сбивает с толку, потому что для меня все ново.
Название вопроса предполагает, что этот вопрос касается сравнения дат, но вы не указываете даты нигде в самом вопросе? Я бы рекомендовал обновить заголовок, чтобы лучше описать вашу проблему. –
о, дорогая. Я удалил старый вопрос, но забыл изменить название! – user1412705