Tôi có cùng một câu hỏi hóc búa như presented in this question, nhưng được áp dụng cho auth.User của Django.Cách chuyển đổi request.user thành proxy auth.User class?
tôi có mô hình proxy này:
class OrderedUser(User):
def __unicode__(self):
return self.get_full_name()
class Meta:
proxy=True
ordering=["first_name", "last_name"]
Và một số mô hình khác của tôi sử dụng một OrderedUser
thay vì một django.contrib.auth.models.User
như kiểu trường.
Trong quan điểm của tôi sau đó tôi sử dụng request.user
để cư trú một trường và - như mong đợi - nhận được một lỗi:
'Cannot assign "<User...>": <field> must be a "OrderedUser" instance'
Tôi chỉ có thể làm OrderedUser.objects.get(request.user.id)
, nhưng đó là một hit bổ sung cho các cơ sở dữ liệu.
Vì vậy, làm thế nào để chuyển đổi một lớp mô hình cơ sở thành lớp được ủy quyền của nó?
Đúng vậy. Có cơ chế nào không liên quan đến cú đánh của DB không? – cethegeek
Vâng, sao chép dict đã làm các trick. Cảm ơn Daniel. – cethegeek
Cảm ơn lời khuyên này. Một điều tôi đã tìm thấy mặc dù, khi sử dụng điều này trong một context_processor để vượt qua một đối tượng người dùng đến các mẫu ... bạn cần phải làm điều đó một cách khác nhau nếu người dùng không đăng nhập. Như bạn có nó, o luôn luôn kết thúc bằng một đối tượng OrderedUser (hậu duệ của User), nhưng nếu người dùng không đăng nhập, nó phải là kiểu AnonymousUser. Vì vậy, tôi sẽ kiểm tra nếu 'request.user.is_authenticated()' và nếu như vậy, chỉ sau đó làm điều trên. Khác, làm 'o = request.user'. –