Имя_родственника в поле "многие ко многим
Ниже приведен мой код.
class Thing(models.Model) :
title = models.CharField(
max_length=200,
validators=[MinLengthValidator(2, "Title must be greater than 2 characters")]
)
text = models.TextField()
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
related_name='fav_thing_owner')
favorites = models.ManyToManyField(settings.AUTH_USER_MODEL,
through='Fav', related_name='favorite_things')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
# Shows up in the admin list
def __str__(self):
return self.title
class Fav(models.Model) :
thing = models.ForeignKey(Thing, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
related_name='favs_users')
# https://docs.djangoproject.com/en/3.0/ref/models/options/#unique-together
class Meta:
unique_together = ('thing', 'user')
def __str__(self) :
return '%s likes %s'%(self.user.username, self.thing.title[:10])
Но я перепутал related_name в ManytoMayFied.
Например, в моем коде я могу получить Вещь пользователя (имя моей модели), используя user.fav_thing_owner.
Но в ManyToManyField у меня есть два related_name(favorite_things, favs_users).
user.favorite_things и user.favs_users получают один и тот же объект...?
user.favorite_things
иuser.favs_users
получают один и тот же объект...?
Нет, user.favorite_thing.all()
получит кверисет Thing
объектов, тогда как user.favs_user.all()
получит кверисет связанных Fav
объектов.
Объекты Fav
, которые вы получаете с помощью user.favs_user.all()
, будут указывать на объекты Thing
, которые вы получаете с помощью user.favorite_thing.all()
. Если ваши объекты Fav
содержат больше данных, например, метку времени, когда вы сделали этот Thing
своим любимым, то иногда полезно получить объекты Fav
, а затем перечислить .thing
, на которые ссылаются эти Fav
объекты.
Имена related_name=…
выглядят немного странно. Обычно это имя для получения отношения в обратном порядке. Возможно, лучше переименовать favs_user
в favorites
или что-то в этом роде.