Olá Vander, como você está?
Peço desculpas pela demora em obter um retorno.
Para evitar que dados duplicados sejam adicionados via Django admin, você pode utilizar a classe ModelAdmin
e sobrescrever o método save_model
. Dentro do método save_model
, é possível verificar se já existe um registro na tabela de valores para o produto que está sendo adicionado. Se já existir, basta levantar uma exceção do tipo ValidationError
com uma mensagem de erro apropriada ou exibir alguma mensagem na tela que indique o erro. Abaixo um exemplo ilustrativo com os códigos apresentados em aula, do modelo de receita:
from django.contrib import admin
from django.contrib import messages
from .models import Receita
from django.utils.safestring import mark_safe
class ListandoReceitas(admin.ModelAdmin):
list_display = ('id', 'nome_receita', 'categoria','tempo_preparo', 'publicada', 'data_receita')
list_display_links = ('id', 'nome_receita')
search_fields = ('nome_receita', 'categoria')
list_filter = ('categoria',)
list_per_page = 5
list_editable = ('publicada',)
ordering = ('-data_receita',)
def save_model(self, request, obj, form, change):
if Receita.objects.filter(nome_receita=obj.nome_receita).exists():
messages.set_level(request, messages.ERROR)
message = 'Já existe um valor cadastrado para este produto.'
messages.error(request, mark_safe(f'<li class="error">{message}</li>'))
else:
obj.save()
messages.success(request, f'O receita "{obj.nome_receita}" foi adicionado com sucesso.')
admin.site.register(Receita, ListandoReceitas)
Abaixo, um gif com resultado, que contém dados ilustrativos para fins didáticos:

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.
Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!