2017-01-28 1 views
1

Я создаю частную систему комментариев между пользователями с нуля, и мне нужно руководство, когда пользователь отправляет форму, вид должен быть get_or_create уникальным Room, где только подключенный пользователь и получатель могут прокомментировать друг друга.Как я могу get_or_create уникальный объект модели при отправке пользователем формы?

Я не понимаю, как я могу собрать свой код, чтобы создать эту функцию, вот модели Я использую:

class Product(models.Model) 
    name = models.CharField() 
    creator = models.ForeignKey(User) 
    ... 

class Room(models.Model): 
    user = models.ForeignKey(Product) 
    #unique url for each new room 
    uuid_url = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    name = models.TextField() 
    ... 

Когда пользователь отправить через эту форму POST это заинтересованная функцию на представлениях.

<form method="post" action="{% url 'new_room_detail' %}"> 
    <input type="hidden" value="{{ product.id }}"> 
    <input type="submit" value="Contact this user"> 
</form> 

views.py, Вот где я не хватает знаний (см код внизу для объяснения):

def new_room(request): 
    try: 
     #get the submited product object 
     product = Product.objects.get(id=request.POST.get('product_id')) 
    except Gig.DoesNotExist: 
     return redirect('/') 

    #if it's the first time that the connected user submit product.id to product.creator 
    #then create OR get if it already exist, a Room with a unique url 
    #in which only request.user and product.creator can comment. 

    return redirect(reverse('commenting_room')) 

def commenting_room(request, uuid) 
    ... 

Я знаю, что есть уже get_or_create функция, но я не понять, как я могу ограничить доступ только к подключенным (request.user) и product.creator пользователям. Как я могу это достичь?

+0

Почему бы вам просто не ограничить кого-либо еще, кто хочет комментировать. Если человек, пытающийся прокомментировать, не является создателем сообщения или подключенным пользователем, не делайте ничего, иначе пусть они комментируют/обмениваются данными. Это всего лишь предложение подумать! – BigMonkey89WithaLeg

+0

@ BigMonkey89WithaLeg, который тоже будет работать, но вопрос остается тем же, я все равно буду зацикливаться на том, как создать_or_get комнату, в которую могут попасть только эти два пользователя. – Lindow

+0

@ KasimovNuriddin создать разрешение для комнаты, как «чат в комнате». Если вы знаете обоих пользователей о создании комнаты, назначьте это разрешение для обоих из них. Проверьте разрешение, когда пользователь совершает какие-либо действия с комнатой. Это! –

ответ

0

Я считаю, что вам нужно, это иметь составной уникальный индекс по идентификатору продукта и комментирует идентификатор пользователя - это в Room модели необходимо установить unique_together('user', 'product') в настройках Meta - если предположить, что ваши поля отношений было названы user и product соответственно.

Смежные вопросы