#python #django #django-models
Вопрос:
Я создавал почтовую систему с двумя моделями Post
и Image
. Я хочу, чтобы в одном посте было несколько изображений
Вот мои модели
class Post(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
content = models.CharField(max_length=150, null=False)
images = models.ManyToOneRel(
field="image", to="Image", field_name="images")
class Image(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
image = models.ImageField()
post = models.ForeignKey(
Post, on_delete=models.CASCADE, related_name="images")
Когда я проверил это в администраторе, поле «Изображения» не отображается.
Я не совсем уверен, как использовать ManyToOneRel в django. До сих пор я понимал, что мне нужно сохранить свой пост, прежде чем я смогу добавить изображение. Есть ли какой-либо другой способ, чтобы у меня было несколько изображений для одного поста
Комментарии:
1. А
ManyToOneRel
есть аForeignKey
. Вы путаете «отношение» с полем.2. У меня очень мало опыта в django, ранее я работал с sqlalchemy, я могу иметь внешний ключ в дочерней таблице и создавать отношения в родительской таблице. В джанго все по-другому
Ответ №1:
вам нужно только одно отношение,на мой взгляд, ключ Foriegn лучше
Просто попробуйте это:-
class Post(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
content = models.CharField(max_length=150, null=False)
image=models.ForeignKey(Image,on_delete=models.SET_NULL,null=True)
class Image(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
image = models.ImageField()
Примечание:- ‘Внешний ключ сам по себе является отношением «Многие к одному»
Ответ №2:
Вы путаете связь с полем модели. Если вы хотите указать отношение «многие к одному», вы делаете это с помощью a ForeignKey
, а не a . Таким образом, это должно выглядеть следующим образом: ManyToOneRel
class Post(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
content = models.CharField(max_length=150, null=False)
image = models.ForeignKey(to='Image', on_delete=models.CASCADE)!
Скорее всего, вас, однако, интересует не отношение «многие к одному», а отношение «один ко многим» (где один пост может содержать ноль, единицу или более Image
). В этом случае объект ForeignKey
принадлежит Image
модели, и вы, таким образом, устанавливаете это при создании нового Image
объекта в ModelAdmin
: