我使用通用的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 method,form_valid method,get_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')
任何建议都将受到赞赏!
答案 0 :(得分:1)
DELETE /{user-id}/permissions?access_token={access_token}
或任何其他可为您提供当前用户obj.creator = Creator.objects.get(user=self.request.user)
而不是Creator
实例的解决方案。就像错误消息说的那样。
无法分配“用户:patrick1”:“ Piece.creator”必须是“ Creator”实例。