【问题标题】:How can I create an object against an object with id如何针对具有 id 的对象创建对象
【发布时间】:2020-01-21 07:37:46
【问题描述】:

所以我想针对一个对象创建一个对象。例如。我想创建一个“票”,只有在创建“潜在客户”后才能制作。因此它们具有一对多的关系。一个潜在客户可以有许多票。虽然门票是针对潜在客户创建的,但我无法通过模板进行管理。

下面是代码。

models.py

class Lead(models.Model):
    lead_title  = models.CharField(max_length=255, null=True, blank=True)
    agent_id    = models.IntegerField(null=True, blank=True)
    email       = models.EmailField(null=True, blank=True)
    .......


class Ticket(models.Model):
    lead   = models.ForeignKey(Lead, on_delete=models.CASCADE, blank=True, null=True)
    passenger_name = models.CharField(max_length=255, null=True, blank=True)
    .......

views.py

def detail_lead(request, id): 
    lead = Lead.objects.get(id=id)
    ticket = lead.ticket_set.all()

    context = {

        'lead' : lead,
        'ticket' : ticket,

    }

    return render(request, 'lead/detail_lead.html', context)

def create_ticket(request, id):
    ticket = Ticket.objects.get(id=id)
    if request.method == 'POST':
        form = Ticket_form(request.POST)
        if form.is_valid():
            form.save()
            print(form)
            return redirect('lead:listlead')
    else:
        form = Ticket_form()

    context = {
        'form' : form
    }
    return render(request, 'ticket/create_ticket.html', context)

urls.py


path('detaillead/<int:id>', detail_lead, name="detaillead"),
.....
path('createticket/<int:id>/', create_ticket, name="createticket"),

detail_lead.html

<a href="{% url 'createticket' lead.id %}"><button type="button" class="btn btn-success">Add
                      Ticket</button></a>

因此,detail_lead.html 有一个“添加工单”按钮,该按钮转到添加工单页面,但是一旦我创建工单,它就不会针对当前特定的潜在客户创建工单。当我在管理页面中查看并查找创建的票证时,它没有选择任何“潜在客户”。

我在这里做错了什么。我只想针对当前的潜在客户创建票证。我知道我必须将潜在客户的 id 传递给“a”标签,但它仍然没有发生。我在这里做错了什么?

比你提前

【问题讨论】:

  • 能否也显示create_ticket方法
  • 这里我编辑了问题

标签: django


【解决方案1】:

您从此处发送的 id "{% url 'createticket' lead.id %}" 是潜在客户 ID,但您为什么要使用它来查找票证?当您要创建票证时,按 id 查找票证的目的是什么?

使用该 ID 查找潜在客户,并在创建工单后建立工单和潜在客户之间的关系。

应该是这样的

lead = Lead.objects.get(id=id)
....
..... 
if form.is_valid():
    item = form.instance
    item.save()
    lead.ticket_set.add(item)
    lead.save()

参考:
https://docs.djangoproject.com/en/3.0/topics/db/examples/many_to_one/#many-to-one-relationships

【讨论】:

  • 您还需要一个表单来收集您的 html 中的票证信息。
  • 完美:D。经过长时间的运行,设法按照您所说的进行。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
相关资源
最近更新 更多