Django CreateView с ManyToManyField - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь использовать Django CreateView и в конечном итоге обновить поле ManyToMany, если пользователь выбирает определенное значение. Я могу получить форму для проверки, но в конечном итоге она не обновляет поле manytomany в базе данных. Не уверен, что я делаю не так. Я ссылался на эту похожую проблему SO, Django ManyToMany поля CreateView в обеих таблицах , но это не помогло мне. Я недавно нашел эту ссылку ... Django CreateView: Как выполнить действие при сохранении , и это кажется очень близким к проблеме, которая у меня возникла. Заранее спасибо за любые мысли.

Мой код:

class AuthorView(LoginRequiredMixin,CreateView):
    model = NewAuthor
    form_class = NewAuthorForm
    template_name = 'create_author.html'

    def form_valid(self, form):
        instance = form.save(commit=False)

        if instance.status == 'Submitted':

            if instance.choice == "Custom":
                instance.access.add(instance.created_by)  
                form.save_m2m()

    return super(CreateAuthorView, self).form_valid(form)

Вот моя модель:

class NewAuthor(models.Model):

CHOICES = (
    ('',''),
    ("Default",Default ),
    ("Custom",Custom ),
)

STATUS_CHOICES = (
    ("Submitted","Submitted"),
    ("Pending","Pending")
)

status = models.CharField(choices=STATUS_CHOICES,default="Submitted",max_length=20)
choice = models.CharField(choices=CHOICES,blank=True,max_length=300)
created_by = models.ForeignKey(User,null=True,on_delete=models.DO_NOTHING,related_name='created_by_user')    
access = models.ManyToManyField(User,related_name="new_author_individual_access")

Это проходит проверку формы, но не сохраняет значение create_by в поле много данных. Я попытался включить form.save (commit = False) и последующую form.save (), но это тоже не помогает. В конечном итоге я пытаюсь условно добавить пользователя create_by в поле manytomany, но пока безуспешно.

В качестве быстрого обновления, если я добавлю form.save_m2m () в мой код, он на самом деле добавит созданный_бай в базу данных ... но я также получаю сообщение об ошибке, в котором говорится, что объект не имеет атрибута "save_m2m". На самом деле он добавляет созданный_бай, но затем выходит из-за этой ошибки. Теперь, если я добавлю commit = False, ошибок не будет, но база данных тоже не обновится.

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Этот пост был ответом на мою проблему. Сохранение полевых форм Django «многие ко многим» Образцовые формы великолепны ... но, видимо, не с m2m ... Это было утомительно ...

0 голосов
/ 26 мая 2019

Я думаю, что вы забыли установить значение create_by, вы сохраняете его с нулевым значением, так как это значение по умолчанию в ваших моделях.Попробуйте

    instance = form.save(commit=False)
    instance.created_by = request.user # or whatever value
    instance.save()
...