Как связать строку в одной модели с полем в другой в django - PullRequest
0 голосов
/ 13 октября 2011

У меня проблема со следующими моделями (упрощенная версия):

Sponsor(models.Model):
     sponsor_name = models.CharField()

Concerts(models.Model):
     artist_name = models.CharField()
     sponsor = models.ManyToMany(Sponsor)

Я захожу в интерфейс администратора и добавляю нового спонсора, он автоматически отображается на любом концерте, все спонсоры отображаются на всех концертах,Это не то, чего я хочу, я хочу, чтобы НЕКОТОРЫЕ спонсоры были на НЕКОТОРЫХ концертах.

Я понимаю, что это проблема взаимоотношений.Я попробовал:

Sponsor(models.Model):
     belongs_to = models.ForeignKey(Concerts)
     sponsor_name = models.CharField()

Concerts(models.Model):
     artist_name = models.CharField()

Но теперь я не могу повторно использовать спонсоров, я должен добавить нового для каждого Концерта.

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Я думаю, что вы ошибаетесь в возможных значениях с фактически выбранной Sponsor в Concert модели в интерфейсе django-admin.

Попробуйте это python manage.py shell, а затем from yourapp.yourmodel import Concerts; Concerts.objects.sponsor_set.all(). Результат должен содержать только выбранные Sponsors для этой модели (держу пари, вы увидите пустой список).

1 голос
/ 13 октября 2011

Если вы хотите, чтобы у каждого концерта было несколько Sponsor с, а каждый Sponsor мог быть связан с несколькими Concert с, то вам нужно будет использовать ManyToManyField вместо ForeignKey .

См. Документы для этого на https://docs.djangoproject.com/en/dev/ref/models/fields/#manytomanyfield

Возможно, проблема в том, как вы отображаете своих спонсоров - пожалуйста, убедитесь, что когда вы распечатываете концерт в своем шаблоне, вы выбираете не всех спонсоров, а вместо этого перебираете concert_instance.sponsor.all() queryset.

...