Wieder mal ich (ja ich stecke schon wieder fest) Diesmal aber mit einem etwas komplexeren Problem:
Erstmal meinem Models und einige Erklärungen dazu:
Code: Alles auswählen
class Attribut(models.Model):
name = models.CharField(max_length=100)
default_index = models.IntegerField(default=1)
visible = models.BooleanField(default=True)
send_value = models.CharField(max_length=10, default=None, null=True)
work_rank = models.IntegerField(default=None, null=True)
processing_method = models.CharField(max_length=4, default=None, null=True)
def __str__(self):
return self.name
class Attribut_Option(models.Model):
attribut = models.ForeignKey(Attribut, on_delete=models.CASCADE)
optionname = models.CharField(max_length=100)
send_value = models.CharField(max_length=10, default=None, null=True)
visible = models.BooleanField(default=True)
def __str__(self):
return self.optionname
class Display_Text(models.Model):
text = models.CharField(max_length=200)
create_date = models.DateField(default=timezone.now)
placeholder_date = models.DateField(default=None, null=True)
selected = models.BooleanField(default=False)
def __str__(self):
return self.text
class Display_Text_Attribut_Options(models.Model):
text = models.ForeignKey(Display_Text, on_delete=models.CASCADE)
attribut_option = models.ForeignKey(Attribut_Option, on_delete=models.CASCADE)
Zum Model:
- die Attribut sind die Namen der Drop-Down Felder der Einstellungen die gemacht werden können
die Attribut_Optionen sind die jeweiligen Einträge dieser Auswahlfelder
die Display_Texte sind die Meldungen selbst, die auf dem LED-Panel angezeigt werden sollen.
Nun bin ich dabei, die zurückgelieferten Daten abzufüllen. Bei der Texteingabe funktioniert das super. Die dazugehörenden Optionen, sind leider etwas schwieriger. Ich habe bereits allerlei versucht, aber ich komme leider nicht weiter (obwohl ich denke, dass wahrscheinlich nicht viel fehlt).
Ich stelle hier auch mal meine View rein, wie sie aktuell ist. Es gibt aber sicher direktere Wege, mein Ziel zu erreichen. Ich denke aber, dass so meine Absicht etwas klarer wird. Bei der aktuellen Version kommt der Fehler: 'QuerySet' object has no attribute 'pk' Dieser Fehler leuchtet mir zwar ein, aber ich weis ehrlich gesagt nicht, wie ich ihn beheben könnte.
Code: Alles auswählen
def new_String(request):
attribute_list = Attribut.objects.all().filter(visible=True)
if request.method == 'POST':
txt_display_text = request.POST.get('display_text')
m = Display_Text(text=txt_display_text)
for werte in attribute_list:
if request.POST.get(werte.name, '') != None:
effect = request.POST.get(werte.name)
attr = Attribut.objects.get(name = werte.name)
attrOpt = attr.attribut_option_set.all().filter(optionname = effect)
inst = Attribut_Option.objects.get(pk = attrOpt.pk)
n = m.display_text_attribut_options_set.create(attribut_option = inst)
m.save()
context = {'attribute': attribute_list, 'newString_page': 'active'}
return render(request, 'sites/new_string.html', context)
Freundliche Grüsse
Roland