我正在按照这个(https://www.django-tips.com/tutorial/django-tutorial-with-twitter-app/1/?page=3)教程使用 django 创建一个 twitter 克隆应用程序。但是在项目中,会通过django默认的用户创建系统来创建用户。
问题是,我想在创建用户时在 userprofile 表中创建一行。否则,用户正在创建,我必须将其插入到访问项目管理部分的 userprofile 表中。我怎样才能做到这一点?
该模型如下所示:
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
relation = models.ManyToManyField(
'self',
through='Relation',
symmetrical=False,
related_name='related_to',
default=None
)
def __unicode__(self):
return self.user.get_full_name()
class Relation(models.Model):
follower = models.ForeignKey(UserProfile, related_name='follows')
is_followed = models.ForeignKey(UserProfile, related_name='followers')
follow_time = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return '%s follows %s' % (self.follower.user.username, self.is_followed.user.username)
class Meta:
unique_together = ('follower', 'is_followed')
Run Code Online (Sandbox Code Playgroud)
而且教程还提到创建一个信号,但他们还没有清除这个文件的创建位置,所以我按照官方文档创建了signals.py文件。
def create_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=user)
post_save.connect(create_profile, sender=User)
Run Code Online (Sandbox Code Playgroud)
所以,我被困在这个阶段,我无法前进。提前致谢。
我想通过验证用户是否已经喜欢这篇文章的查询来设置我的喜欢按钮。如果用户已经喜欢这个,则按钮将为“不喜欢”,否则为“喜欢”。我找不到进行查询的正确方法以及如何在我的模板中实现它。提前致谢。
我的型号:
class Tweet(models.Model):
added = models.DateTimeField(auto_now_add=True)
tweeter = models.ForeignKey(UserProfile, related_name='user_tweets')
content = models.TextField(max_length=140)
likes = models.IntegerField(default=0)
def __unicode__(self):
return self.content
def total_likes(self):
return self.likes.count()
def approved_comments(self):
return self.comments.filter(approved_comment=True)
class Like(models.Model):
liker = models.ForeignKey(UserProfile, related_name='liked_user')
liked_tweet = models.ForeignKey('Tweet', related_name='liked_post')
liked_date = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return u'%s liked %s tweet' % (self.liker, self.liked_tweet)
Run Code Online (Sandbox Code Playgroud)