удаление изображения из дочернего элемента удаление его из родительского элемента - PullRequest
1 голос
/ 17 марта 2019

У меня есть 2 модели Сообщение и событие

Ниже моя модель сообщения

class Post(models.Model):
    user = models.ForeignKey(User, related_name='posts')   
    title = models.CharField(max_length=250, unique=True)
    slug = models.SlugField(allow_unicode=True, unique=True, max_length=450)  
    message = models.TextField(max_length=3000)  
    post_image = models.ImageField(upload_to='post_images/')

, а затем у меня есть модель событий

class Event(models.Model):
    user = models.ForeignKey(User, related_name='cook')
    post = models.ForeignKey(Post, related_name='recipe')      
    date = models.DateField()    
    image = models.ImageField(blank=True, null=True)

Теперь нижеCreateView для моего события

class CreateEvent(IsVerifiedMixin, CreateView):
    model = Event
    form_class = EventForm
    template_name = 'event/event_form.html'
    def form_valid(self, form, *args, **kwargs):
        self.object = form.save(commit=False)
        event = self.object
        user = self.request.user
        today = datetime.date.today()
        if today + datetime.timedelta(days=3) <= event.date <= today + datetime.timedelta(days=30):
            event.user = user
            slug = self.kwargs['slug']
            post = get_object_or_404(Post, slug=slug)
            event.post = post
            event.image = post.post_image ###########THIS IS WHERE THE EVENT GETS ITS IMAGE           
            event.save()            
        else:
            form.add_error(field="date", error="The date has to be more than or equal to 3 days and less than 30 days")
            return super().form_invalid(form)

    def get_success_url(self, *args, **kwargs):
        slug = self.kwargs['slug']
        obj = get_object_or_404(Post, slug=slug)
        url_ = obj.get_absolute_url()
        user = self.request.user
        if user.is_authenticated():
            return url_

Теперь проблема в том, когда я удаляю событие.Это удаляет post_image.Почему это происходит.Как я могу предотвратить это

1 Ответ

1 голос
/ 17 марта 2019

Ваша модель фактически нарушает правила нормализации базы данных, поскольку у вас есть ненужная избыточность между Event и Post. Event связано с Post, поэтому одно и то же поле "в синхронизации" может привести к множеству ошибок целостности, например той, с которой вы столкнулись.

Лучший способ справиться с этим - удалить поле image из Event и вместо этого ссылаться на изображение через event_instance.post.post_image.url.

В противном случае нет причины, по которой вашему ребенку следует удалять изображение своего родителя, , если вы не используете Django <1.3 </a>. Это может быть связано с тем, что в более старых версиях Django удалял изображение, если был удален связанный экземпляр модели - и поскольку вы копируете путь к изображению из одной модели в другую, URL-адрес остается тем же.

...