Форум сайта python.su
Помогите пожалуйста
у меня есть вот такая модель
from django.conf import settings from django.db import models from django.contrib.auth.models import User class Product(models.Model): name = models.CharField(max_length=100) photo = models.ImageField(upload_to='photo/', default="photo/index.jpg") description = models.CharField(max_length=500) def __unicode__(self): return '{0} {1}'.format( self.name, self.description) class Rate(models.Model): user = models.ForeignKey(User, related_name='rates_by_user') product = models.ForeignKey(Product) rate = models.IntegerField(default=0) def __unicode__(self): return '{0} {1}'.format( self.user, self.product) class Comment(models.Model): user = models.ForeignKey(User) product = models.ForeignKey(Product) text = models.CharField(max_length=500) date = models.DateTimeField(auto_now_add=True) def __unicode__(self): return '{0} {1}'.format( self.text, self.date)
Офлайн
Не понятно ничего.
У вас есть продукт, вы не можете получить словарь {имя_пользователя: оценка}?
Офлайн
FishHook
в ангуляре? нет
мне это либо как то на стороне реста надо сделать, чтоб потом использовать отдельную апишку, но все равно это поле надо будет выводить в коментариях, либо дописывать модели какую то строку
Отредактировано skripka696 (Июль 28, 2015 09:18:51)
Офлайн
Модели и базу данных вы делаете?
Офлайн
svas
Да
Офлайн
skripka696А почему?
в ангуляре? нет
Офлайн
FishHook
а как?
вот мой шаблогн
<div ng-controller="ProductIdController">
<img width="150px" height="150px" ng-src="{{ product.photo }}" />
<div class="form-group ">
<label for="name"> Name:</label>
{{product.name}}
</div>
<div class="form-group">
<label for="description">Description:</label>
{{product.description}}
</div>
<div ng-repeat="c in comment" class="bg-info">
{{c.user.username}}<br>
<p class=" pull-right"> {{c.date | date:'dd-MM-yyyy HH:mm:ss'}}</p><br>
<p>{{c.text}}</p>
</div>
<div>
<label for="comment_content" >Add new comment:</label>
<textarea class="form-control" id="id_text" name="content" rows=1 width="50px" ng-model="selected_description">
</textarea>
<button class="btn btn-default" ng-click="submitComment(selected_description)">Submit</button>
</div>
<div ng-if="error">
<div class="alert alert-warning norecordsL" role="alert">{{error}}</div>
</div>
<div>
//product detail productApp.controller('ProductIdController', function ($location, $route, $scope, $http, $routeParams, ProductIdService, CommentIdService) { ProductIdService.get({pk: $route.current.params.pk}, function (result) { $scope.product = result; }); CommentIdService.query({pk: $route.current.params.pk}, function (result) { $scope.comment = result; // console.log($scope.comment); }); $scope.submitComment = function(){ var data= {description: $scope.selected_description, product:$scope.product.pk, } $http({ method: 'POST', url: '/api/comment/', data: { text: $scope.selected_description, product:$scope.product.pk, }, }).success(function (response) { console.log(response.user); }).error(function (e) { console.log(e); if (e.user!=undefined){ $scope.error = 'You must be logged' } // else{ // $scope.error = 'Enter text comment' // } }); // console.log(data); $scope.comment.push( CommentIdService.query({pk: $route.current.params.pk}, function (result) { $scope.comment = result; }) ); }; });
Офлайн
У вас получается (по базе данных), что на один и тот же товар, тот же пользователь может дать разные оценки. Причем к коментарию они никак не привязаны. Если это правильно, то если добавить метод в модель Comment
def get_last_rate(self): try: return Rate.objects.filter(user=self.user, product=self.product).order_by('-id')[:1].get() except Rate.DoesNotExist: return None
Отредактировано svas (Июль 28, 2015 09:52:16)
Офлайн
svas
а я могу добавить это полем в сериализатор?
Офлайн
skripka696А зачем вам два разных ресурса ProductIdService, CommentIdService если это одно дерево
а как?
{id: 23, name: "Подушка-пердушка", price: 1000, comments: [{user: "FishHook", rate: 5, comment: "jmsdf ksdkln asdvklnasd vklnasdvklnasdv klnasdvklnasdv klnasdvkln asdvkln"}, {user: "babay", rate: 1, comment: "Shit"} ] }
Офлайн