Как добавить 2 внешних ключа из одной таблицы? Является ли это возможным?

Вопрос: Документация Django говорит, что я должен быть в состоянии сделать это, как я сделал ниже: class comp_name(models.Model): competition_type = models.ForeignKey(comptype, verbose_name='Level') competition_name = models.CharField(verbose_name='Division',max_length = 60) comp_style = models.CharField(verbose_name='HT/SC', max_length = 20) def __unicode__(self): return str(self.competition_type) + " " + self.competition_name + " "+ self.comp_style class peaople(models.Model): comp_name = models.ForeignKey(comp_name, blank=True, related_name="competition_name" ,verbose_name='Division') heat_num

Вопрос:

Документация Django говорит, что я должен быть в состоянии сделать это, как я сделал ниже:

class comp_name(models.Model): competition_type = models.ForeignKey(comptype, verbose_name=’Level’) competition_name = models.CharField(verbose_name=’Division’,max_length = 60) comp_style = models.CharField(verbose_name=’HT/SC’, max_length = 20) def __unicode__(self): return str(self.competition_type) + » » + self.competition_name + » «+ self.comp_style class peaople(models.Model): comp_name = models.ForeignKey(comp_name, blank=True, related_name=»competition_name» ,verbose_name=’Division’) heat_num = models.ForeignKey(comp_name,blank=True, related_name=»heat_number»)

Однако это дает мне эту ошибку:

in __init__ assert isinstance(to, six.string_types), «%s(%r) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string %r» % (self.__class__.__name__, to, RECURSIVE_RELATIONSHIP_CONSTANT) AssertionError: ForeignKey(<django.db.models.fields.related.ForeignKey>) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string ‘self’

Что именно я делаю неправильно здесь?

Я пытаюсь добавить два внешних ключа из одной модели

Лучший ответ:

Что касается ответа на ваш вопрос: Да. Вы можете добавить несколько внешних ключей к вашей модели, которые подключены к одной таблице. Единственное, что вы должны учитывать, это дать им разные значения связанных related_name, как и вы.

Что касается ошибки, которую вы получаете; вы создали поле ForeignKey с именем comp_name в модели peaople которое фактически comp_name другую модель с именем comp_name которая была определена над ней. Вы должны изменить название поля на что-то другое, тогда ваша проблема будет решена.

Примечание. Предполагается, что comptype – это еще одна модель, которая определяет тип конкуренции.

class Competition(models.Model): competition_type = models.ForeignKey(CompetitionType, verbose_name=’Level’) name = models.CharField(verbose_name=’Division’,max_length=60) style = models.CharField(verbose_name=’HT/SC’, max_length=20) def __unicode__(self): return «{} {} {}».format(self.competition_type, self.name, self.style) class Competitor(models.Model): competition_name = models.ForeignKey(Competition, blank=True, related_name=»competition_name» ,verbose_name=’Division’) heat_num = models.ForeignKey(Competition, blank=True, related_name=»heat_number»)

Я бы рекомендовал вам следовать правильным соглашениям об именах. Дополнительную информацию см. В документации PEP8.

Ответ №1

Внешний ключ не должен быть пустым. Удалить blank = True

Оцените статью
Добавить комментарий