我正在學習Django,並挑戰自己創建一個小型票務系統作爲研究案例。獲取當前登錄的用戶並將其設置爲模型|上的默認用戶Django + Python3
完成了一些事情,但現在我有一個小問題。
如何當我保存「Ticket」時,Django獲取當前登錄的用戶並將其設置爲我的票證模型中的「usuario」字段的默認值?
這是我models.py
文件:
from django.contrib.auth.models import User
from django.db import models
from datetime import datetime
class Projeto(models.Model):
"""
Classe que gere os Projetos
Permite que se cadastre N usuários por Projeto
Retorna:
NOME_DO_PROJETO | SITE_DO_PROJETO
"""
nome = models.CharField(max_length=100)
site = models.CharField(max_length=200)
informacoes = models.TextField(blank=True)
usuarios = models.ManyToManyField(User, related_name='projetos')
def __str__(self):
return self.nome + " | " + self.site
class Ticket(models.Model):
"""
Classe que gere os Tickets no sistema.
Retorna:
DATA HORA | TITULO DO CHAMADO
"""
TIPOS_TICKET = (
('BUG', 'Bug'),
('URGENTE', 'Urgente'),
('FINANCEIRO', 'Financeiro'),
('MELHORIA', 'Melhoria')
)
STATUS_TICKET = (
('ABERTO', 'Aberto'),
('AGUARDANDO_CLIENTE', 'Aguardando Cliente'),
('EM_ANALISE', 'Em Análise'),
('FINALIZADO', 'Finalizado'),
('CANCELADO', 'Cancelado'),
)
titulo = models.CharField(max_length=200)
conteudo = models.TextField()
tipo = models.CharField(max_length=30, choices=TIPOS_TICKET, default='BUG')
status = models.CharField(max_length=30, choices=STATUS_TICKET, default='ABERTO')
projeto = models.ForeignKey(
Projeto,
on_delete=models.CASCADE,
limit_choices_to={'usuarios':1}
)
usuario = models.ForeignKey(
User,
on_delete=models.CASCADE,
null=True
)
data_abertura = models.DateTimeField('Data Abertura', auto_now_add=True)
data_fechamento = models.DateTimeField('Data Fechamento', blank=True, null=True)
def __str__(self):
return str(datetime.strftime(self.data_abertura, "%d/%m/%y %H:%M") + " | " + self.titulo)
def save(self, *args, **kwargs):
self.usuario = User
super(Ticket, self).save(*args, **kwargs)
class TicketMsg(models.Model):
"""
Mensagens dos tickets
Retorna:
texto da mensagem
"""
texto = models.TextField()
ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
data_resposta = models.DateTimeField('Data Resposta')
def __str__(self):
return str(self.texto)
而且我admin.py
文件:
from django.contrib import admin
from django.contrib.auth.models import User
from .models import Ticket, TicketMsg, Projeto
# Register your models here.
class ProjetoAdmin(admin.ModelAdmin):
model = Projeto
filter_horizontal = ('usuarios',)
class TicketAdmin(admin.ModelAdmin):
model = Ticket
exclude = ('status', 'data_fechamento', 'data_abertura', 'usuario')
list_display = ('titulo', 'tipo', 'status', 'projeto', 'data_abertura')
list_filter = ('projeto', 'tipo', 'status')
def get_ordering(self, request):
return ['data_abertura']
admin.site.register(Projeto, ProjetoAdmin)
admin.site.register(Ticket, TicketAdmin)
admin.site.register(TicketMsg)
這是我的機票從Django管理列表。
的想法,是使用默認的Django用戶系統,以確定誰是試圖打開一個票。
我用成功做了系統過濾每個用戶可以打開門票的項目,但現在我不能設置爲默認值誰是輸入新門票的當前用戶。
這實際上是我的形式。
所有幫助是值得歡迎的! 謝謝你們!
Saddly它不工作。 這裏是答案: ValueError at/admin/tickets/ticket/add/ 無法分配「」:「Ticket.usuario」必須是「User 「instance.' –
我猜你沒有刪除Ticket模型上的save()方法,正如我在答案中所述。錯誤告訴你,你不能指定用戶使用usuario;這是有道理的,usuario是一個用戶實例。可悲的是,你沒有複製包含錯誤代碼行的堆棧跟蹤部分。將來你可以檢查那些容易提示你的問題。 – Max
你好@Max .... TY !!!!你是最好的!是的,我忘了刪除save()。 –