На этом были некоторые близкие, но все, что я могу найти, это то, что я делаю, и его не работает.django "- это связанное вручную отношение m2m через модель ..., которое не имеет внешних ключей к"
Ниже приведен пример: у вас есть продукт, который может иметь несколько вариантов. Каждый вариант может иметь несколько вариантов.
class Option_Choices(models.Model):
"""
choices for each option
"""
name = models.CharField(max_length=30)
def __unicode__(self):
return self.name
class Product_Options(models.Model):
"""
products can have many options
"""
name = models.CharField(max_length=30)
option_type = models.IntegerField(choices=OPTION_TYPE)
choices = models.ManyToManyField(Option_Choices, related_name='product_options_choices')
def __unicode__(self):
return self.name
class Product(models.Model):
"""
there are options for products - different sizes/colors
"""
name = models.CharField(max_length=30)
options = models.ManyToManyField(Product_Options, related_name='product_options')
def __unicode__(self):
return self.name
Выглядит достаточно просто, я получаю эту ошибку
«опции» представляет собой вручную определенные M2M связь через модель Product_Options, который не имеет внешних ключей к Product_Options и продукт
Я пробовал много разных вещей, в том числе используя «сквозной», не могу понять, почему это не работает. это то, что все говорят. есть идеи?
«Обратное» отношение M2M неверно. См. [Docs] (https://docs.djangoproject.com/en/dev/topics/db/models/) – hobs
@hobs Не могли бы вы уточнить? – AndrewS
Я неправильно понял, что вы имели в виду под «обратным». Я думал, что вы изменили направление отношений, поместив поля FK в противоположные таблицы, и я не прокрутил достаточно далеко вправо, чтобы убедиться, что вы не определили Option_Choices как явную «сквозную» модель. Нельзя помещать M2M в сквозной стол ... но вы этого не сделали, так что все в порядке. Это то, что я получаю для скимминга. – hobs