2014-12-26 20 views
0

工作,我有两个型号:FeedUserDjango的REST框架:如何处理列表

一个User可以创建一个Feed用POST方法。其他User可以看到此提要,并且每次用户看到提要时,提要对象都应更新并将用户的ID保存在'seen_by_users'中。

class User(models.Model): 
    registered = models.DateTimeField(auto_now_add=True) 
    last_login = models.DateTimeField(auto_now=True) 

class Feed(models.Model): 
    owner = models.ForeignKey(User, blank=False, related_name='feed_owner') # required 
    feed_message = models.CharField(max_length=255, blank=False, default='') 
    created = models.DateTimeField(auto_now_add=True, blank=False) # required 
    seen_by_users = models.ForeignKey(User, blank=True, null=True, related_name='seen_by_users') 
在串行

我:

class FeedSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Feed 
     fields = ('id', 'owner', 'feed_message', 'created', 'seen_by_users') 

    def create(self, validated_data): 
     feed = Feed.objects.create(**validated_data) 
     return feed 

    def update(self, instance, validated_data): 
     instance.seen_by_users = validated_data.get('seen_by_users', instance.seen_by_users) 
     instance.save() 
     return instance 

现在,我可以只保存一个用户ID seen_by_users但是, 我怎么能更改或编辑我的模型或串行器添加用户的数组到seen_by_users。当我更新Feed时它应该工作。

我在Django Rest Framework 3.0中使用Django 1.7.1。

+0

只是一个友好的抬起头,_usually_你的'related_name'与模型上的字段名称不匹配。 'User.seen_feeds'可能比'User.seen_by_users'更有意义(这很有道理,就像'Feed.seen_by_users')。 –

+0

对不起,我不明白你的意思。我找不到'Users.seen_by_users'。 –

+0

另外,'Feed.seen_by_users'字段应该可能是[多对多关系](https://docs.djangoproject.com/en/stable/topics/db/examples/many_to_many/)而不是一个-太多。以下是[模型字段上的'related_name'属性]的参考(http://stackoverflow.com/q/2642613/359284)。 –

回答

0

您可以为您的应用程序创建一些自定义中间件,并在用户的ID访问该视图时设置会话。然后您可以在视图中访问该ID并将其保存到数据库;您可能需要数据库中的多对多关系;例如许多用户可以查看饲料,反之亦然 - Middleware info

您可以考虑每个用户浏览的进给时间创造一个信号,你的数据库的更新 - Signals info