Django: ManyToManyField.limit_choices_to, кажется, не работает должным образом

У меня есть следующие модели:

models.py:

def limit_name_choices():
    return {"pk__gt": Name.objects.last().pk} 

class Name(models.Model):
    name = models.CharField(max_length=100)
    primary = models.BooleanField()


class Robject(models.Model):
    project = models.ForeignKey(to=Project, null=True)
    author = models.ForeignKey(
        to=User, null=True, related_name="robjects_in_which_user_is_author")
    create_by = models.ForeignKey(
        to=User, related_name="robjects_created_by_user", null=True)
    create_date = models.DateTimeField(null=True)
    modify_by = models.ForeignKey(to=User, null=True)
    name = models.ManyToManyField(
        "Name",
        related_name="robject_name",
        help_text='The name of robject',
        limit_choices_to= get_last_name_pk()
    )

views.py:

def robject_create_view(request, *args, **kwargs):
    if request.method == "POST":
        form = RobjectForm(request.POST)
        if form.is_valid():
            return redirect("/")
    else:
        form = RobjectForm()
    return render(request, 'robjects/create_robject.html', {"form":form})

а также forms.py:

class RobjectForm(forms.ModelForm):
    class Meta:
        model = Robject
        fields = '__all__'

        # this comes from django-addanother (admin popup functionality)
        widgets = {
            'name': AddAnotherWidgetWrapper(
                forms.SelectMultiple,
                reverse_lazy('add_name', args=['proj_1']),
            ),
        }

Я создал имитацию администратора Robject создать форму. Это означает, что я добавил "кнопку плюс" рядом с ModelMultipleChoiceField полеимени, которое приводит к появлению всплывающего окна, где я могу создать новое имя. Я намерен иметь пустое поле имени (без выбора) каждый раз, когда открываю свою форму создания робота. К сожалению, я вижу ранее созданные имена, когда обновляю страницу формы.

Моя проблема, функция limit_name_choices не вызывается каждый раз, когда создается новая форма. Это ошибка или я что-то не так делаю?

Из документации django: https://docs.djangoproject.com/en/1.11/ref/models/fields/

Если вызываемый используется для limit_choices_to, он будет вызываться каждый раз, когда создается новая форма. Он также может быть вызван при проверке модели, например, командами управления или администратором. Администратор создает наборы запросов для проверки входов своей формы в различных крайних случаях несколько раз, поэтому существует вероятность, что ваш вызываемый объект может быть вызван несколько раз.

0 ответов

Другие вопросы по тегам