【发布时间】:2017-11-18 05:41:08
【问题描述】:
我在引用模板中的扩展用户模型 (UserProfile) 时遇到了一些问题。
我设置的是当前登录的用户将是与该评论关联的“用户对象”。我这样做如下:
admin.py:
class CommentAdmin(admin.ModelAdmin):
list_display = ('created_by', 'post', 'created', 'active')
list_filter = ('active', 'created')
search_fields = ('created_by', 'body')
def save_model(self, request, obj, form, change):
instance = form.save(commit=False)
if not hasattr(instance,'created_by'):
instance.created_by = request.user
instance.save()
form.save_m2m()
return instance
def save_formset(self, request, form, formset, change):
def set_user(instance):
if not instance.created_by:
instance.created_by = request.user
instance.save()
if formset.model == Comment:
instances = formset.save(commit=False)
map(set_user, instances)
formset.save_m2m()
return instances
else:
return formset.save()
我的评论模型如下:
class Comment(models.Model):
created_by = models.OneToOneField(User, related_name='created_by', null=True, blank=True)
post = models.ForeignKey(Post, related_name='comments')
body = models.TextField()
created = models.DateTimeField(auto_now_add=True)
active = models.BooleanField(default=True)
class Meta:
ordering = ('created',)
def __str__(self):
return "Comment by {} on {}".format(self.created_by, self.post)
我的 UserProfile 模型扩展了 User 模型如下:
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='userprofile')
user_avatar = models.ImageField(storage=site_media_upload_location, null=True, blank=True)
一切正常。我可以保存 cmets 并将所有 cmets 关联到登录的用户实例。我现在遇到的问题是:我想为与每个评论关联的用户(而不是当前登录的用户)显示 user_avatar(在 UserProfile 模型中定义)。
到目前为止,我已经尝试了以下方法:
<img src="{{ MEDIA_URL }}{{ comment.created_by.user.userprofile.user_avatar.url }}">
<img src="{{ MEDIA_URL }}{{ comment.created_by.userprofile.user_avatar.url }}">
但似乎没有任何效果(最后的猜测更多的是绝望而不是实际的可能性)。
那么,根据上述模型 - 以及评论是使用当前记录的用户对象的实例创建的知识 - 我如何让这一切正常工作?
我唯一的另一个想法是我可能需要在 cmets 模型中添加类似的内容:
class Comment(models.Model):
commenter_avatar = models.OneToOneField(UserProfile.user_avatar, related_name='user_avatar', null=True, blank=True)
也许我可以在 cmets admin save() 方法中请求 user.userprofile.user_avatar?
【问题讨论】:
标签: django django-models django-forms django-templates django-views