当用户提交表单时,如何get_or_create一个独特的模型对象?

时间:2017-01-28 02:29:26

标签: python django django-views

我正在创建一个从头开始的用户之间的私人评论系统,我需要指导,当用户提交表单时,视图应该Room一个唯一的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() ... ,其中只有连接的用户和收件人才能互相评论。

我不明白如何汇编代码来创建此功能,这是我正在使用的模型

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

当用户通过此表单提交时,将其发送到视图上的相关功能。

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)
    ... 

views.py ,这是我缺乏知识的地方(请参阅那里的代码以获得解释):

get_or_create

我知道已有request.user功能,但我不明白如何限制只能连接到已连接的product.creator}和STORM_HOME用户。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

我相信你需要的是在产品ID和评论用户ID上有一个复合唯一索引 - 所以在Room模型中你需要在Meta选项中设置unique_together('user', 'product') - 如果假设您的关系字段已分别命名为userproduct