Python 当用户提交表单时,如何获取或创建唯一的模型对象?

Python 当用户提交表单时,如何获取或创建唯一的模型对象?,python,django,django-views,Python,Django,Django Views,我正在从头开始在用户之间创建一个私人评论系统,我需要指导,当用户提交表单时,视图应该get\u或\u创建一个独特的Room,其中只有连接的用户和接收者可以相互评论 我不明白如何汇编代码来创建此功能,下面是我正在使用的模型: class Product(models.Model) name = models.CharField() creator = models.ForeignKey(User) ... class Room(models.Model): use

我正在从头开始在用户之间创建一个私人评论系统,我需要指导,当用户提交表单时,视图应该
get\u或\u创建一个独特的
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>

我知道已经有了
get\u或\u create
功能,但我不明白如何将访问权限仅限于连接的(
request.user
)和
product.creator
用户。我怎样才能做到这一点

我认为您需要的是在产品id和评论用户id上有一个复合的唯一索引-因此在
房间
模型中,您需要将
唯一性一起设置(“用户”、“产品”)
在元选项中-如果假设您的关系字段分别命名为
用户
产品

我认为您需要的是在产品id和注释用户id上有一个复合唯一索引-因此在
房间
模型中,您需要一起设置
唯一('user'、'product'))
在元选项中-如果假设您的关系字段分别命名为
user
product

您为什么不限制任何其他选择发表评论的人。如果试图评论的人不是帖子创建者或连接的用户,请不要做任何事情,否则让他们评论/交流。这只是一个值得考虑的建议@BigMonkey89WithaLeg也行,但问题还是一样,我仍然会被困在如何创建一个只有这两个用户才能访问的房间里。@Kasimovnuridin为类似“聊天室”的房间创建权限。如果您知道创建文件室时的两个用户,请将此权限分配给他们。当用户对文件室执行任何操作时,请检查权限。就这样!你为什么不限制其他选择发表评论的人呢。如果试图评论的人不是帖子创建者或连接的用户,请不要做任何事情,否则让他们评论/交流。这只是一个值得考虑的建议@BigMonkey89WithaLeg也行,但问题还是一样,我仍然会被困在如何创建一个只有这两个用户才能访问的房间里。@Kasimovnuridin为类似“聊天室”的房间创建权限。如果您知道创建文件室时的两个用户,请将此权限分配给他们。当用户对文件室执行任何操作时,请检查权限。就这样!
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)
    ...