отношение один ко многим не отображается в администраторе

#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 :