django modelForm не проверяет добавленный внешний ключ - PullRequest
1 голос
/ 19 июня 2019

У меня есть modelForm, где я перезаписываю метод init , чтобы получить предопределенное значение из FK.Однако при проверке формы с помощью метода is_valid () происходит сбой, поскольку он говорит, что «Palabras» уже существует, но не принимает во внимание FK «fk_funcion», так как оба являются PK.

Models.py

class Palabras(models.Model):
    fk_funcion = models.ForeignKey(Funcion, related_name='funcion', on_delete=models.CASCADE)
    palabra = models.CharField(max_length=30, unique=True)
    porcentaje = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(100)])

    class Meta:
        unique_together = ("fk_funcion", "palabra"),

    def __str__(self):
        return self.palabra

Forms.py

class PalabraForm(forms.ModelForm):
    class Meta:
        model = Palabras
        fields = ('palabra','porcentaje', "fk_funcion")

    def __init__(self, *args, **kwargs):
        fk_funcion = kwargs.pop('fk_funcion','')
        super(PalabraForm, self).__init__(*args, **kwargs)
        self.fields['fk_funcion']=forms.ModelChoiceField(queryset=Funcion.objects.filter(id=fk_funcion))

Views.py

def create_palabra(request, pk_funcion):
    data = dict()
    if request.method == 'POST':
        form = PalabraForm(request.POST,fk_funcion=pk_funcion,,initial={'fk_funcion':pk_funcion}) #I have tried with and without the initial value
        if form.is_valid():
            #Some action

Что янеобходимо изменить, чтобы сделать форму для проверки "palabra" и "fk_funcion" в modelForm.

Спасибо

1 Ответ

0 голосов
/ 19 июня 2019

Вы пометили palabra как unique=True. Если вы хотите, чтобы он был уникальным только вместе с fk_function, удалите его и положитесь на ограничение unique_together.

(Также не имеет смысла для fk_function быть одновременно параметром формы и полем в этой форме. Вероятно, вам следует удалить его из списка полей.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...