Django:CreateView不显示字段并将其设置为request.user(ForeignKey)

时间:2018-08-26 18:01:04

标签: python django

我使用通用的CreateView让登录用户(创建者)添加模型Piece的对象。由于创建作品是由创建者(已登录用户)完成的,因此无需使用CreateView来显示或操纵“创建者”字段。因此,我希望不显示它并将其设置为已登录的用户。但是,诸如覆盖form_valid或使用get_form_kwargs之类的方法似乎无法完成它。使用form_valid方法会产生ValueError:

Cannot assign "<SimpleLazyObject: <User: patrick1>>": "Piece.creator" must be a "Creator" instance.

我希望解决方案即将来临。

尝试过但没有用: form_valid methodform_valid methodget_form_kwargs method

我的代码:

models.py

class Piece(models.Model):
    creator = models.ForeignKey('Creator', on_delete=models.SET_NULL, null=True)
    title = models.CharField(max_length=200)
    summary = models.TextField(max_length=1000, help_text='Enter a brief description of the Piece')
    created = models.DateField(null=True, blank=True)
    ...

from django.contrib.auth.models import User
class Creator(models.Model):
    ...
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    ...

views.py

class PieceCreate(LoginRequiredMixin, CreateView):
    model = Piece
    fields = ['title', 'summary', 'created']
    initial = {'created': datetime.date.today()}

    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.creator = self.request.user
        return super(PieceCreate, self).form_valid(form)

    success_url = reverse_lazy('pieces')

任何建议都将受到赞赏!

1 个答案:

答案 0 :(得分:1)

DELETE /{user-id}/permissions?access_token={access_token}

或任何其他可为您提供当前用户obj.creator = Creator.objects.get(user=self.request.user) 而不是Creator实例的解决方案。就像错误消息说的那样。

  

无法分配“用户:patrick1”:“ Piece.creator”必须是“ Creator”实例。