desperadik
@desperadik
Истина где-то рядом.

Как разрулить циклы или как не впасть в рекурсию?

Имеются три "замечательные" модели:
models.py
class Book(models.Model):
    title = models.CharField(max_length=255)
    text = models.TextField()

class Images(models.Model):
   image = models.ImageField(upload_to=file_uploads_to)
   alt = models.CharField(max_length=255)

class BookImages(models.Model):
    book = models.ForeignKey(Book, related_name='book_images')
    image = models.ForeignKey(Images)

Имеется views.py
def book_image_set(request, book_id):
    """" request  - приходит GET с листом id's модели Images либо пустой.

    try:
       book = Book.objects.get(id=book_id)
   except Book.DoesNotExist:
       pass
   else:
         .... проверка на то какой метод запроса ...
         ..... и тут пошла суть вопроса.....
         if  book.book_images.all():
             for book_image in book.book_images.all():
                 item = book_image.image
                 if not request.GET.keys():
                    book_image.delete()
                 else:
                    for i in request.GET:
                        if item.id == i:
                            continue
                        if item.id !=i and item.id in request.GET.keys():
                            continue
                        if item.id !=i and item.id not in request.GET.keys():
                            book_image.delete()
                        else:
                            # пропустим try
                            image = Image.obejcts.get(id=i)
                            book_img = BookImages(book=book, image=image)
                            book_img.save()
           else:
                 for i in request.GET:
                     image = Image.obejcts.get(id=i)
                     book_img = BookImages(book=book, image=image)
                     book_img.save()
                        
                # На повтор кода не обращайте внимания.

Приходят четыре GET.keys() поочереди:
1) [55, 56]
2) [55, 56, 57]
3) [56, 57]
4) []

Дык вот на втором запросе циклы не правлиьно выдают логику. Толи глаза намылил. То что-то не учел.
  • Вопрос задан
  • 245 просмотров
Пригласить эксперта
Ответы на вопрос 2
sim3x
@sim3x
Пахнет пхп
Удаление, без csrf, без forms

0. Перечитай как работает Form
1. Что мешает прикрепить картинки к книге?

class Book(models.Model):
    title = models.CharField(max_length=255)
    text = models.TextField()

class Images(models.Model):
   book = models.ForeignKey(Book, related_name='book_images')
   image = models.ImageField(upload_to=file_uploads_to)
   alt = models.CharField(max_length=255)


если картинки дублируются
class Book(models.Model):
    title = models.CharField(max_length=255)
    text = models.TextField()

class Images(models.Model):
   book = models.ManyToMany(Book, related_name='book_images')
   image = models.ImageField(upload_to=file_uploads_to)
   alt = models.CharField(max_length=255)


2. Что мешает отфильтровать картинки по ид и удалить скопом?
Images.filter(pk__in=[id1, id2,...]).detele()
Ответ написан
Прошу прощения за резкость выражений, но это дичайший говнокод.

Не могу сказать где ошибка, потому что логика работы совершенно не очевидна и не понятно, что вы пытаетесь сделать.

Вот тут например код после else не выполнится ни при каких условиях.
for i in request.GET:    
    if item.id == i:
        continue
    if item.id !=i and item.id in request.GET.keys():
        continue
    if item.id !=i and item.id not in request.GET.keys():
        book_image.delete()
    else:
        # пропустим try
        image = Image.obejcts.get(id=i)
        book_img = BookImages(book=book, image=image)
        book_img.save()


Советую вам хорошо отдохнуть, после чего перечитать какую-нибудь книгу по python, например эту, потом документацию по джанго, после чего вы перестанете задавать такие вопросы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы