Найти - Пользователи
Полная версия: Дополнительное поле!
Начало » Django » Дополнительное поле!
1 2
skripka696
Помогите пожалуйста
у меня есть вот такая модель
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)

Мне нужно когда я вывожу комментарий, выводить имя пользователя и оценку которую он поставил, ограничена только REST и Angular. подскажите как это можно сделать?
FishHook
Не понятно ничего.
У вас есть продукт, вы не можете получить словарь {имя_пользователя: оценка}?
skripka696
FishHook
в ангуляре? нет

мне это либо как то на стороне реста надо сделать, чтоб потом использовать отдельную апишку, но все равно это поле надо будет выводить в коментариях, либо дописывать модели какую то строку
svas
Модели и базу данных вы делаете?
skripka696
svas
Да
FishHook
skripka696
в ангуляре? нет
А почему?
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;
				})
			);
		};
});
svas
У вас получается (по базе данных), что на один и тот же товар, тот же пользователь может дать разные оценки. Причем к коментарию они никак не привязаны. Если это правильно, то если добавить метод в модель 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
то вы сможете получить последнюю (скорей всего) оценку и как-то добавить ее в ваш апи (это зависит от библиотеки которую используете).
Если это не правильно - пересмотрите свою базу данных.


Ну и то что вы выше ответили - это больше к angular относится, чем к django
skripka696
svas
а я могу добавить это полем в сериализатор?
FishHook
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"}
]
}

а если вы хотите получать комментарии по одному, то в чем проблема если вернуться ко вторпому посту в этом топике?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB