我试图通过重写viewset
的perform_create()
方法将模型的字段设置为经过身份验证的用户,但是我得到了一个错误。在
这是我的模型:
class Reservation(models.Model):
booking = models.CharField(max_length=15, primary_key=True)
creator = models.ForeignKey(User, on_delete=models.PROTECT, related_name='user_reservations')
agency = models.ForeignKey('GeneralApp.Agency', on_delete=models.PROTECT, related_name='agency_reservations')
comment = models.TextField(null=True, blank=True)
status = models.ForeignKey(ReservationStatus, on_delete=models.PROTECT, related_name='status_reservations')
arrival_date = models.DateField()
departure_date = models.DateField()
register_date = models.DateField(auto_now_add=True)
confirmation = models.CharField(max_length=15, null=True, blank=True)
is_invoiced = models.BooleanField(default=False)
def __str__(self):
return "[{}]{}".format(self.booking, self.agency)
def clean(self, *args, **kwargs):
if self.arrival_date >= self.departure_date:
raise ValidationError('Departure date must be later than Arrival date.')
elif self.arrival_date <= timezone.datetime.now().date():
raise ValidationError('Arraival date must be later than today.')
def save(self, *args, **kwargs):
self.full_clean()
super(Reservation, self).save(*args, **kwargs)
这是我的序列化程序:
^{pr2}$这是我的视图集:
class ReservationViewSet(viewsets.ModelViewSet):
queryset = models.Reservation.objects.all()
serializer_class = serializers.ReservationSerializer
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
这是我得到的错误:
TypeError at /reservations_manager/reservations/
Got a `TypeError` when calling `Reservation.objects.create()`.
This may be because you have a writable field on the serializer class that is not a valid argument to `Reservation.objects.create()`.
You may need to make the field read-only, or override the ReservationSerializer.create() method to handle this correctly.
我试着按照http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/#associating-snippets-with-users的指示去做,但显然,我做错了什么。在
这只是一个愚蠢的错误:我将字段名从
owner
改为creator
,但我忘了在perform_create()
方法中更改它:相关问题 更多 >
编程相关推荐