Как определить модели в django, которые предоставляют пользовательские значения на основе предварительного выбора для поля?
Учитывая следующую модель, которая хранит список желаний пользователя для чтения книг:
class ReadingList(models.Model):
user_id = models.ForeignKey(UserInfo, on_delete=models.DO_NOTHING, null=False, blank=False, default=None, db_column='user_id')
book= models.CharField(max_length=255, blank=False)
creation_time = models.DateTimeField(blank=True)
class Meta:
unique_together = (('user_id', book),)
Я хочу создать модель, помогающую отслеживать время, потраченное на чтение книги в разные дни, которая выглядит примерно так:
class ReadingTracker(models.Model):
user_id = models.ForeignKey(ReadingList, on_delete=models.DO_NOTHING, related_name='user', blank=False, db_column='user_id')
book= models.ForeignKey(ReadingList, on_delete=models.DO_NOTHING, related_name='book-to-read', blank=False, db_column='book')
time = models.DateTimeField(blank=True)
time_spent = models.floatfield()
На стороне клиента (соответствующей ReadingTracker) для обоих полей user_id
и book
.
Я вижу, что перечислены ReadingList object (1)
, ReadingList object (2)
, .... Но это не работает так, как ожидалось.
Я хочу добиться следующего:
Для поля
user_id
я хочу видеть что-то вроде dummy_uid1, dummy_uid2, ..., чтобы быть перечисленным.Рассмотрим, что dummy_uid1 хочет прочитать книгу1 и книгу2, а dummy_uid2 хочет прочитать книгу1 и книгу3. Когда dummy_uid1 выбран как
user_id
, я хочу, чтобы только book1 и book2 были перечислены для выбора.
Как мне определить модель в django rest framework, чтобы достичь этого? Любые предложения, связанные с вышесказанным, будут очень признательны и заранее благодарны.
В этом вопросе есть две части:
Если вы хотите видеть значение, отличное от
ReadingList object (1)
, то вам нужно определить__str__
значение вашей модели, вы можете сделать это следующим образом:class ReadingList(models.Model): ... def __str__(self): return f'{self.user_id}' # return whatever string you want to display
Если вы хотите просто отобразить книги для конкретного пользователя, то вы можете использовать
filter()
(см. документацию по Django):reading_list = ReadingList.objects.get(...) ReadingTracker.objects.filter(user_id=reading_list)
Однако я бы добавил, что у вас есть user_id
на объекте ReadingList, который, похоже, связан с моделью User, но ваш user_id
на ReadingTracker является ForeignKey отношением к ReadingList, что вносит путаницу. Я бы предложил переименовать поле или действительно сделать его связанным с моделью User (хотя в этом нет необходимости, поскольку вы все равно можете фильтровать по User через модель ReadingList).