поле связано с именем во многих ко многим

#django #django-models

Вопрос:

Ниже приведен мой код.

 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])  

Но я запутался в имени, связанном со многими людьми.

например, в моем коде я могу получить вещь пользователя(имя моей модели), используя user.fav_thing_owner.

Но в ManyToManyField у меня есть два связанных имени(favorite_things, favs_users).

user.favorite_things и user.favs_users получают один и тот же объект..?

Комментарии:

1. Нет, user.favorite_thing вы получите Thing запрос на набор объектов, в то user.favs_user время как получите запрос на набор связанных Fav объектов.

Ответ №1:

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 буквам s, на которые Fav ссылаются эти объекты.

Буквы related_name=… s выглядят немного странно. Обычно это имя для извлечения отношения в обратном порядке. Возможно, лучше переименовать favs_user в favorites или что-то в этом роде.