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, например эту, потом документацию по джанго, после чего вы перестанете задавать такие вопросы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы