#python #django #django-models #foreign-keys
#python #django #django-модели #внешние ключи
Вопрос:
У меня возникли проблемы с настройкой потока моего сайта с множеством взаимосвязей.
Например, существует много моделей, которые имеют много типов, и наоборот. У меня есть настроенный URL-адрес site / model / typed / detail
Поскольку typed и model — это ManyToMany, я не могу перейти на свою страницу сведений.
Я думаю, что могу обойти это, создав переменные, которые буквально связывают модель с типом, чтобы она могла использоваться в качестве уникального идентификатора внешнего ключа по деталям. Это будет выглядеть примерно так: site / model / model_type /detail
Однако у меня возникают проблемы с извлечением значений. Если есть более простой способ решить эту проблему, пожалуйста, дайте мне знать!
class typed(models.Model):
typed = models.CharField(max_length=200, help_text='Enter MFG - Type')
model = models.ForeignKey('model', on_delete=models.SET_NULL, null=True)
model_type = model typed
def get_absolute_url(self):
return reverse('typed-detail', args=[str(self.model), str(self.model_type)])
def __str__(self):
return self.model_type
Я получаю эту ошибку: TypeError: неподдерживаемые типы операндов для : ‘ForeignKey’ и ‘CharField’
Комментарии:
1. Пит, я могу быть совершенно неправ, но я не уверен, что это распространенный подход при моделировании с помощью ORM Django. С одной стороны, самый простой ответ — найти способ принудительного преобразования значений
model
иtyped
в строки, а затем объединить их, но, не зная больше о вашей цели и, возможно, одного или двух примеров того, как они будут связаны, я не уверен, что это решает большую проблему. Вы рассматривали возможность использования типа поля ManyToMany в Django? docs.djangoproject.com/en/3.1/topics/db/examples/many_to_many
Ответ №1:
вы можете сделать это
class typed(models.Model):
typed = models.CharField(max_length=200, help_text='Enter MFG - Type')
model = models.ForeignKey('model', on_delete=models.SET_NULL, null=True)
def get_absolute_url(self):
return reverse('typed-detail', args=[str(self.model), "%s%s" % (self.model,self.typed)])
Комментарии:
1. Это работает, я могу сказать, что он передает правильную часть, спасибо!
Ответ №2:
Каков ваш __str__
метод для model
модели? Если это что-то вроде return self.title
, вы можете попробовать это:
def __str__(self):
return str(self.model) ' ' str(self.typed)
Комментарии:
1. Как насчет части get_absolute_url?