Модель с более чем одним ForeignKey, ForeignKey может быть более одного для одной модели - PullRequest
0 голосов
/ 14 сентября 2018

Итак, чтобы сделать все возможное, я обнаружил, что у меня должно быть поле ManytoMany, которое не является проблемой.

Это поле имеет следующую форму:

class Form(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['notes', 'scan']
    widgets = {
        'scan': forms.CheckboxSelectMultiple(),
    }

В представлении, которое я имею тогда:

form = Form(request.POST)
if from.is_valid():
    inst = from.save(commit=False)
    inst.something = something
    inst.save()

Что мне делать, чтобы сохранитьтестировать или сканировать из формы?

Я пытался:

inst.test.add(form.cleaned_data['test'])

Но это не работает для теста или сканирования.

Модель выглядит следующим образом:

class MyModel(models.Model):
    id = models.AutoField(primary_key=True)
    notes = models.TextField(default='')
    scan = models.ManyToManyField(Scan)
    ....

Пожалуйста, помогите, я не смог ничего найти в интернете по этому поводу Спасибо!

1 Ответ

0 голосов
/ 15 сентября 2018

Документация метода сохранения формы говорит обо всем: если у вас есть ModelForm, которая содержит модель ManyToManyField, например:

class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['__all__']  # or fields = ['scans'] assuming scans is the M2M field in MyModel

Тогда у вас есть два способа сохранитьотношения:

  • Непосредственно, используя form.save()

Вызов save_m2m () требуется только в том случае, если вы используете save (commit = False).Когда вы используете простую функцию save () в форме, все данные, включая данные «многие ко многим», сохраняются без необходимости каких-либо дополнительных вызовов методов.

  • Иликосвенно, потому что вы хотите управлять экземпляром перед сохранением:

    if form.is_valid():
        instance = form.save(commit=False)
        instance.some_field = some_value
        instance.save()
        form.save_m2m()  # this saves the relationships
    
...