Отношения "один ко многим" не отображаются в админке
Я делал систему постов с двумя моделями 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. Пока что я понял, что мне нужно сохранить пост, прежде чем я смогу добавить изображение. Есть ли другой способ иметь несколько изображений для одного поста
Вы хотите только одно отношение, на мой взгляд, иностранный ключ лучше
Просто попробуйте это:-
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()
Примечание:- 'Иностранный ключ сам по себе является отношением многие-к-одному'
Вы путаете отношение с полем модели. Если вы хотите указать отношение "многие к одному", вы делаете это с помощью ForeignKey
, а не . Таким образом, это должно выглядеть так: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
: